汇编入门基础一
欢迎进入计算机的二进制世界
观察与思考:
进制之间的转换:
10进制:0123456789
2进制:01
8进制:01234567
十六进制:0123456789abcdef
为了不表示误解,在二进制后面加上B ,在十六进制后面加上H,
二进制转十进制: 1011 转十进制为 1*23 +0*22 +1*21+1*20 = 11
每一位代表的数字不相同,在二进制中例如
4位1101中 分别代表 8 4 2 1
5为的11111 中 本别代表16 8 4 2 1
转为10进制也就是在相应的位数上乘以对应的所代表的数字,因为二进制中只有0和1,可以把0看成无,1看成有,那么就把相对应的数字相加即可
例如:11001 就相当于16+8+1=25,,11001转为十进制为25
10011就相当于16+2+1 = 19,,11001转为十进制为19
十进制转为二进制:
一个数不断除以2取余数即为2进制,为什么除以2,因为除以二的余数只有两种可能0和1,那么就能组成一个二进制
那么给一个十进制的数字70,在70中看看是否能用 2的倍数组成就可快速判断出其二进制,例如
二进制的位数对应的十进制数字为 64 32 16 8 4 2 1
70,中有一个64,70-64=6,6中有一个2,一个4,那么70的二进制位1000110
注意上面这种方法不适合255以上的数字
十六进制:每一位对应的16的位次方
十六进制转十进制
比如e12H = e*162+1*161+2*160 =3602
十进制转十六进制 一个数除以16即可
或者 看16的倍数,类似于上面二进制快速转换十进制,,,,83 = 5*16+3 = 53
十六进制快速转换二进制:
9A = 1001 1010 把9分按8421为1001 十六进制的A转10进制为10,10的二进制为1010,十六进制转为二进制即为1010
也就是说把十六进制的每个数对应的十进制分割成二进制即十六进制
二进制转十六进制,就要把每四个二进制为转为一个十六进制即可
汇编入门说明:
s高低电频转为数字0,1,0,1转为二进制
二进制需要转为可读性的东西,那么汇编语言就出现
机器指令:01001010110101 B
将机器指令转为高低电平,驱动计算机运行
进入dosbox
相同的一串十六进制数字: + 编号 + 十六进制数字 + 一些英语单词+一些数字字母
073F : 0113 7400 JZ 0115
十六进制数字翻译成二进制:
7400为机器指令,后面的为汇编指令,这两个是一一对应的
7 4 00 JZ 0115
0111 0100 0000 0000
编译器为翻译软件,把汇编指令通过编译器翻译成机器指令,当然不同的编译器翻译的语言不通
汇编指令 通过编译器翻译成机器指令或者机器码
伪指令 告诉编译器 也就是翻译软件,怎么翻译
符合体系 *-*/编译器管
汇编指令存放到哪里??内存 主内存绝大多数指令和数据存到内存中,
例子:
内存编号:073F:0244
内存编号是从零开始的
dosbox -debug -u -d
比较D指令和U指令的解释不通
u指令看到的是机器指令和汇编指令
d指令看到的是数据
内存最小单元是74H 03H 一个字节=2个十六进制位=8个二进制位
1Bytes =8bit 1bit = 1个2进制位
计量单位
cpu和内存条之间进行联系即数据通信,需要知道内存编号(地址线)(传输位置),数据信息(数据线)(传输数据),读写信息(控制线)(判断是读还是写),
地址线:::
一根地址线只能表示0或者1,那么地址线的数量决定了你能够找到多么大的地址(寻址能力)2n
比如十根地址线,它的寻址范围为 0~1023
数据线:::
一次能传多少数字(字节的能力),
控制线:::(对其它部件的控制能力)
B800:400是显存的地址 像现存中修改地址
数据寄存器,地址寄存器
DS ES SS CS 都是地址信息
左边为段地址寄存器,右边为偏移地址寄存器
便宜地址寄存器为 SP BP SI DI IP BX (BX特殊两者都可)
地址加法器,地址的计算方式,
段地址*16(10H)+偏移地址=物理地址
段地址*16 =基础地址
基础地址+偏移地址 = 物理地址
8086cpu的地址总线为20根, 地址寄存器能存16位,,还差的那些就是偏移地址
例子:段地址 F230H 偏移地址为C8H
F230*10H+C8H = F23C8即为20位的地址
数据寄存器:
AX BX CX DX
它们可以自分割为 高八位和低八位 例如 AX分为 AH AL寄存器