32位微处理器指令系统概述

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。


分享到:


相關文章: