- 8086的寄存器有14个。
分别为:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW
- 通用寄存器
8086的所有寄存器都是16位的,可以存放两个字节。AX,BX,CX,DX这几个寄存器通常存放一般性数据,又称为通用寄存器。
由于8086的上一代cpu寄存器都是8位的为了保持向上兼容,使上代的cpu编写的程序稍加修改即可以在8086上运行。所以8086的通用寄存器每一个都可以分为两个独立运行的八位寄存器来用
AX=AH+AL
BX=BH+BL
CX=CH+CL
DX=DH+DL
例如在AX寄存器中存入100111000100000即4E20H,则在AH和AL上分别位01001110和00100000即4EH和20H
3字在寄存器中的存储
出于对兼容性的考虑,8086一次可以处理两种尺寸的数据
字节:记为byte。一个字节由8bit组成,可以存放在八位寄存器中
字:记为word。一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节
一个字可以存放在16位的寄存器中,即这个字的高位和低位分别存放在寄存器的高八位和低八位中。
例如:一个字节型数据20000,存放在AX寄存器中,AH和AL分别存放了他的高八位和第八位,这个字节型数据可以看出20000,也可以看出两个独立的字节型数据分别为78和32
例:AX里存放了8226H,如果执行add ax 8226H会发生什么?
ax=ax+8226H=8226H+8226H=1044CH,但由于8086的寄存器为16位即只能存放四位十六进制的数所以高位的1不能保存在ax中,所以ax中的数据位044CH。
例:ax中存放了00C5H,如果执行add al,93H 会发生什么?
al=al+93H=C5+93H=158H,但al为低八位寄存器即只能存放两个16进制的数据所以高位1丢失,ax为0058H
(注:这里的丢失只是指进位值不能在八位寄存器中保存,不是cpu真的丢弃这个进位值)
说明al是作为一个独立的八位寄存器来使用的,和ah没有关系,cpu在执行这条指令时会认为ah和al是两个不相关的寄存器
例:ax中存放了00C5H,如果执行add ax 93H结果为?
cpu在执行这条指令时只会把ax当成一个16位寄存器来进行16位运算,即ax=ax+93H=0158H
(注:在进行数据传送或运算时,要注意指令的两个操作对象的位数应该是一致的,否则会报错)