32位微处理器的指令系统可以分为以下七类:
① 数据传送指令
② 算术运算指令
③ 位操作指令
④ 字符串操作指令
⑤ 控制转移指令
⑥ 符号扩展指令
⑦ 处理机控制指令
1. 32位微处理器指令系统的四种格式:
(1)无操作数指令:
格式为[标号:] 操作符 [;注释]
如:
NOP;(空操作指令)。
在所有指令中,标号与注释是可选项。
(2)单操作数指令:
格式为[标号:] 操作符 OPD(地址) [;注释]
它的操作规定为:
① 操作对象为目的地址中的操作数,操作结束后,其运算结果送入目的地址中。
② 操作数不能是立即数。
③ 操作数类型必须明确。
如:
INC BYTE PTR[2233H]
;用数据类型说明符PTR对内存数据定义为字节(BYTE)。
INC AX
;由于AX为16位寄存器,数据类型确定为字类型。
(3)双操作数指令:
格式为 [标号:] 操作符 OPD,OPS [;注释]
它的操作规定为:
① OPD和OPS应具有相同的类型,即必须同时是8、16或32位。
② 目的操作数OPD不能是立即数。
③ 操作结束后,其操作结果送入目的操作数中,而源操作数并不改变。
(只有CMP、TEST等极少数指令不影响目的操作数)。
④ 源操作数和目的操作数不能同时为存储器操作数。假如一个操作数在存储器中,则另一个操作数要么是寄存器操作数,要么是立即数,但是立即数不能作为目的操作数。下列两条指令是错误的。
ADD [EAX],[EBX];(错误)
MOV 20H,AL;(错误)
指令ADD [EAX],[EBX]的两个操作数类型不明确,按照规则至少要有一个明确;
因为[EAX]或[EBX]都是内存单元地址,可以从这个地址读取1、2、4个字节;两边都不确定。
mov EAX,[EBX]
mov [EAX],EBX
EAX与EBX都是32位;
mov EAX,[EBX]
;说明从[EBX]开始的位置读4个字节送给EAX。
;但是[EAX]与[EBX]并列出现时,数据类型都不明确。
mov AL, [EBX]
;从[EBX]开始读1 个字节
mov AX, [EBX]
;从[EBX]开始读2 个字节
mov EAX,[EBX]
;从[EBX]开始读4 个字节
mov [EAX],[EBX]
;就不知道读几个了
MOV 20H,AL
;20H是目的操作数,目的操作数不能是立即数;
;应改为MOV [20H],AL
(4)三操作数指令
格式为:
[标号:] 操作符 OPD,OPS,立即数 [;注释]
如: SHRD AX,BX,imm8/CL。
将BX寄存器中的imm8/CL位右移进入AX中。
2. 16位与32位指令的区别
16位编程时立即数、寄存器操作数及存储器操作数只能使用8位和16位。
32位编程时立即数、寄存器操作数和存储器操作数可以是8、16、32位。
16位编程时EA是16位,
32位编程时EA是16或32位。
16位编程时段寄存器只能使用CS、SS、DS和ES,
32位编程时段寄存器可以是CS、SS、DS、ES、FS和GS。
閱讀更多 又將如何存在 的文章