CPU由运算器(进行信息处理),控制器(控制各种器件进行工作),寄存器(进行信息存储)等构成,这些器件靠内部总线连接,外部总线负责CPU和其他主板上的器件连接。
8086CPU有14个寄存器:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。
2.1 通用寄存器
8086CPU的所有寄存器都是16位的,AX,BX,CX,DX这4个寄存器通常存放一般性的数据,所以叫通用寄存器。
以AX为例,一个16位的寄存器可以存储一个16位的数据,16位寄存器可以存储65536个二进制,从
0000000000000000到1111111111111111(0-65535)。
8086CPU上一代的CPU的寄存器都是8位的,8086的4个寄存器可以分别独立为2个寄存器,
AX:AH,AL
BX:BH,BL
CX:CH,CL
DX:DH,DL
把18放入AX中,那么AX寄存器中存放情况如下
00000000 00010010
高8位AH中为00000000
低8位AL中为00010010
一个8位寄存器能存储的数据最大值为(2^8)-1=255,从0-255一共256个数。
2.2 字在寄存器中的存储
8086CPU可以一次性处理2种尺寸的数据
字节:byte,一个字节由8个二进制组成,可以存放8位寄存器中。
字:word,一个字由2个字节组成,2个字节分别称为这个字的高位字节和低位字节。
字存储在16位的寄存器中,高低位字节就对应存在高8位寄存器和低8位寄存器。
2.3 汇编指令中的一个问题
AX=8226H BX=8226H
add ax,bx 这里ax+bx=1044C(H),但是超出了16位寄存器AX的存储范围,所以只有044C(H)能被存入AX,假如这里是32位的寄存器,那么1044C(H)就能存入。
另一个问题
AX=00C5H
add al,93H 这里93H+C5H=158H,但是al是8位寄存器,所以最高位1丢失,这里ah是不受影响,AX=0058H。
如果执行指令是add ax,93H,那么这里就是00C5H+93H,16位的AX寄存器可以存储下,所以AX=0158H。
注意:执行数据传送或运算时,指令的2个操作对象的位数要求一致。
本文版权归kennyMc和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。