x86 CPU 可以执行 16 位数的指令,也可以执行 8 位数的指令。
指令中,如果不说明白位数是多少,CPU 就不干了。
--------
MOV CX, 200
INC AL
这种指令,使用了寄存器,这就非常清楚的说明了位数。
--------
mov ds:[0],1 ,这种指令,使用了存储器。
而对于存储器,可以进行两个字节、也可以进行一个字节的传送。
这条指令,究竟是多少位的?
这就让 CPU 糊涂了。
必须写成:
mov word ptr ds:[0],1,加上了《word ptr》,就是《字属性》,就是16位数的传送。
俩问题是一个意思,不能确定内存单元长度时,就必须用X ptr说明。
对于8086来说,指令中有寄存器或pop、push指令。
1、指令中有寄存器,就可确定内存单元长度或操作数尺寸,如:
mov ax,1
mov bx,ds:[0]等,操作数为2字节,字单元(16位)。
mov al,1
mov bh,ds:[0]等,操作数为1字节,字节单元(8位)。
2、指令中有pop、push,操作数为2字节,字单元(16位)。
以上两种情况都可确定内存单元长度或操作数尺寸,不需用X ptr说明。
X ptr是说明内存单元长度或操作数尺寸的。凡是不能确定内存单元长度或操作数尺寸的,就必须用X ptr说明。