首页 > 代码库 > 汇编语言学习1 寄存器

汇编语言学习1 寄存器

基本概念

1个字节 == 8位 == 11111111(2进制)

255(10进制) = 11111111(2进制)==FF(16进制)==8位寄存器


65535(10进制) = 11111111 11111111(2进制)==FFFF(16进制)==16位寄存器

16位通用寄存器: AX BX CX DX, 最大能存放是数是FFFF

ah al  表示 AX的高8位  和 低八位寄存器


比如执行:mov ax f4a3H     

ax=f4a3H(62627)   

内存中 11110100   10100011
                    f4         a3
                    ah         al

bh bl,ch cl,ch cl 同理。


注: 对于cpu来说 ah ,al是独立的 没有任何进位关系,最大能存放FF

以下语句都是错误的:
mov ax al(在8位和16寄存器之间传输数据)
mov ax bl(在8位和16寄存器之间传输数据)
mov al 20000(在8位最大存放255的数据, mov al 255正确)
add al 100H(将一个高8位的数据加到8位寄存器, add al 1FH正确)

习题:
1.mov ax,62627   ax=______

2.mov ah,31H    ax=______

3.mov al,23H    ax=______

4.add ax,ax     ax=______

5.mov bx,826CH   bx=______

6.mov cx,ax     cx=______

7.mov ax,bx      ax=______

8.add ax,bx      ax=______

9.mov al,bh      ax=______

10.mov ah,bl     ax=______

11.add ah,ah     ax=______

12.add al,6      ax=______

13. add al,al    ax=______

14.mov ax,cx     ax=______


习题解析:
1.mov ax,62627   ax=f4a3H  ;<--把十进制数62627变成十六进制就是结果F4A3H

2.mov ah,31H     ax=31a3H  ;<--ah=31h,al不变,所以ax=31A3H

3.mov al,23H    ax= 3123H  ;<--al=23h,ah不变,所以ax=3123h

4.add ax,ax      ax= 6246H  ;<--ax=ax+ax=3123h+3123h=6246h,用计算器算一下结果就出来了

5.mov bx,826CH   bx=826CH   ;<--bx=826CH,ax不变

6.mov cx,ax      cx=6246H   ;<--cx=ax=6246H

7.mov ax,bx      ax=826CH   ;<--ax=bx=826CH

8.add ax,bx      ax=04d8H   ;<--ax=ax+bx=826CH+826CH=04D8H,0前面还有个1,但是ax放不下,所以丢弃,16位寄存器只能放下 FFFF

9.mov al,bh      ax=0482H   ;<--al=bh=82h,ah不变

10.mov ah,bl     ax=6C82H   ;<--ah=bl=6Ch,al不变

11.add ah,ah     ax=d882H   ;<--ah=ah+ah=6Ch+6Ch=D8h,al不变

12.add al,6      ax=d888H   ;<--al=al+6=82H+6=88h,ah不变

13. add al,al    ax= d810H  ;<--al=al+al=88h+88h=10h,ah不变,结果是110h但al的大小只有8位二进制位,能放下的最大数为FFh,所以高位丢弃,只保留低两位

14.mov ax,cx     ax=6246H    ;<--ax=cx=6246H

汇编语言学习1 寄存器