AX,BX,CX,DX寄存器这四个寄存器也被称为通用寄存器.一般用来存放数据,一个寄存器可以存放16bit,也就是2bytes. 所以也被称为16位寄存器。
什么特殊的地方导致这四个寄存器和其他寄存器不一样呢? 是因为这四个寄存器可以被分为两个8位寄存器,比如
AX = AH + AL, BX = BH+BL, CX = CH + CL, DX = DH+DL
8086cpu的数据线是16根,所以可以处理两种尺寸的数据.
1. 字节型数据,byte 8bit存放到8位寄存器中。 2. 字型数据, 2bytes=16bit, 存放到16寄存器中。
在使用mov指令,要保证数据和寄存器之间位数的一致性。
使用mov ax, 5指令, 汇编编译器会将5编译成 16位的5, 但使用mov al,5指令,汇编编译器会将5编译成8位的5.也就是数据的位数要与寄存器的位数一致.
mov ax, 6666; # ax寄存器只能存放16位数据,所以这条指令没有问题。
mov ax, 66666;# 66666H已经查过了16位,该数据放入不了ax寄存器,所以执行会报错。
那么,在做加法运算中,如果一个数查过了16位,ax会怎么存储? 如果查过了8位,al,ah又会怎么存储?
如下图: 8080H+8080H = 10100H, 当ax只能存放16位,所以ax的值为 0100H, 那么问题来了,前面的又1去哪了呢?
当8位的寄存器al加上超过8位的数据时, 执行会报错.