标签:
基本概念
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
标签:
原文地址:http://www.cnblogs.com/mayingkun/p/4206248.html