1. 8086CPU有14个寄存器,
通用寄存器:AX、BX、CX、DX
SI、DI
SP、BP、IP
CS、SS、DS、ES、PSW
8086CPU的所有寄存器都是16位的。
8位寄存器放存放十进制数的范围:[0] 至 [2^8], 即 [0] ~ [255]
2. 看到上面这么多寄存器,头晕了不? = =~
3. 既然头晕,就一个一个来吧。 先学习通用寄存器。
通用寄存器用来存放一般性数据,所以称为通用寄存器。
4. 有一个很有意思的地方。 8086CPU的上一代CPU,寄存器都是8位的,为了保证兼容性,
8086CPU中的AX、BX、CX、DX(通用寄存器) 都只可以分为2个独立的8位寄存器来用。
AX 可分为 AH AL
BX 可分为 BH BL
CX 可分为 CH CL
DX 可分为 DH DL
L 应该是 Lower 低8位(0 ~ 7位)的意思, H 应该是 Higher 高8位(8 ~ 15位)的意思.
5. 8086CPU可以一次性处理2种尺寸的数据: byte(字节)、word(字)
其中 一个字(word)由2个字节组成, 1 word = 2 bytes.
6. 几条汇编指令:
mov ax, 18 将18送入寄存器AX mov ah, 78 将78送入寄存器AH add ax, 8 将寄存器AX中的数值加上8 mov ax, bx 将寄存器BX中的数据送入寄存器AX add ax, bx 将AX和BX寄存器中的数值相加,结果存在AX中
7. 几种常见错误:
mov ax, bl (不能在8位和16位寄存器之间传送数据) mov bh, ax (不能在16位和8位寄存器之间传送数据) mov al, 20000 (8位寄存器最大可存放值为:255,这个20000 = =~) add al, 100H (8位寄存器可存放不了这个高于8位的数据, 嘻嘻)
8. 代码示例:2个通用寄存器 add
假设 ax 和 bx 都是 8226H
add ax, bx
// 以下进行小学加法运算
8226H
+
8226H
--------------------
1044CH
由于 ax 寄存器要存放 add 的结果值 1044CH, 而1044CH明显是大于4位的16进制数据,
ax 寄存器是16位寄存器,只能存放 16 / 4 = 4 位16进制数据,
所以最高位 1 无法在ax 寄存器中保存,最终 ax 寄存器中存放的数据为: 044CH
9. 代码示例:al 寄存器 add
假设: al 中存放的数据为 C5H
add al, 93H
// 下面还是进行小学加法运算
C5H
+
93H
----------------
158H
由于al 是8位寄存器,最多只能存放 8 / 4 = 2位16进制数据,
So, 最高位 1 无法在 al 寄存器中存放, 最终 al 寄存器中的数据为 58H