您的位置:首页 > 其它

80x86的指令系统(一)

2017-05-24 20:49 218 查看
1、数据传送指令:

通用数据传送指令

MOV、PUSH、POP、XCHG

累加器专用传送指令

IN、OUT、XLAT

地址传送指令

LEA、LDS、LES

标志寄存器传送指令

LAHF、SAHF、PUSHF、POPF

类型转换指令

CBW、CWD

2、MOV DST, SRC

注意:

* DST、SRC 不能同时为段寄存器 MOV DS, ES ×

* 立即数不能直接送段寄存器 MOV DS, 2000H ×

* DST 不能是立即数和CS

* DST、SRC 不能同时为存储器寻址

* 不影响标志位

3、进栈指令: PUSH SRC

出栈指令: POP DST

堆栈:‘先进后出’的存储区,段地址存放在SS中,

SP在任何时候都指向栈顶,进出栈后自动修改SP。

注意:

* 堆栈操作必须以字为单位。

* 不影响标志位

* 不能用立即寻址方式

PUSH 1234H ×

* DST不能是CS

POP CS ×

4、 交换指令:XCHG OPR1, OPR2

注意:

* 不影响标志位

* 不允许使用段寄存器

5、累加器专用传送指令(只限使用AX或AL)

输入指令 IN (I/O → CPU)

输出指令 OUT (CPU → I/O)

注意:

* 不影响标志位

* 前256个端口号00H~FFH可直接在指令中指定(长格式)

* 如果端口号≥ 256,端口号 →DX(短格式)

6、换码指令:XLAT 或 XLAT OPR

执行操作:(AL) <— ( (BX) + (AL) )

注意:

* 不影响标志位

* 字节表格(长度不超过256)

首地址 → (BX)

* 需转换的代码位移量 → (AL)

7、地址传送指令

有效地址送寄存器指令:

LEA REG, SRC

执行操作: (REG) <— SRC

注意:

* 不影响标志位

* REG 不能是段寄存器

* SRC 必须为存储器寻址方式

8、标志寄存器传送指令

标志送AH指令: LAHF

执行操作:(AH) <— (FLAGS的低字节)

9、类型转换指令

CBW AL → AX

CWD AX → (DX,AX)

注意:

* 无操作数指令

* 隐含对AL 或AX 进行符号扩展

* 不影响条件标志位

10、算术指令:

加法指令

ADD、ADC、INC

减法指令

SUB、SBB、DEC、NEG、CMP

乘法指令

MUL、IMUL

除法指令

DIV、IDIV

十进制调整指令

DAA、DAS、

AAA、AAS、AAM、AAD

11、加法指令

加法指令: ADD DST, SRC

带进位加法指令: ADC DST, SRC

加1指令: INC OPR

注意:

* 除INC指令不影响CF标志外,均对条件标志位有影响。

SF:

1 结果为负

0 否则

ZF:

1 结果为0

0 否则

CF:

1 和的最高有效位有向高位的进位

0 否则

OF:

1 两个操作数符号相同,而结果符号与之相反

CF 位表示 无符号数 相加的溢出。

OF 位表示 带符号数 相加的溢出。

12、减法指令

减法指令: SUB DST, SRC

带借位减法指令: SBB DST, SRC

减1指令: DEC OPR

求补指令:NEG OPR

比较指令: CMP OPR1, OPR2

注意:

除DEC指令不影响CF标志外,均对条件标志位有影响。

减法指令对条件标志(CF/OF/ZF/SF)的影响:

CF:

1 被减数的最高有效位有向高位的借位或减法转换为加法运算时无进位

0 否则

OF:

1 两个操作数符号相反,而结果的符号与减数相同

0 否则

CF 位表示 无符号数 减法的溢出。

OF 位表示 带符号数 减法的溢出。

NEG指令对CF/OF的影响

CF:

0 操作数为0

1 否则

OF:

1 操作数为-128(字节运算)或操作数为-32768(字运算)

0 否则

13、乘法指令

无符号数乘法指令: MUL SRC

带符号数乘法指令: IMUL SRC

执行操作:

字节操作数 (AX) <— (AL) * (SRC)

字操作数 (DX, AX) <— (AX) *(SRC)

注意:

* AL (AX) 为隐含的乘数寄存器。

* AX (DX,AX) 为隐含的乘积寄存器。

* SRC不能为立即数。

* 除CF和OF外,对条件标志位无定义。

乘法指令对 CF/OF 的影响:

MUL指令:CF,OF

00:乘积的高一半为零

11 否则

IMUL指令:CF,OF

00:乘积的高一半是低一半的符号扩展

11:否则

14、除法指令

无符号数除法指令: DIV SRC

带符号数除法指令: IDIV SRC

执行操作:

(AL) <— (AX) / (SRC) 的商

(AH) <— (AX) / (SRC) 的余数

字操作

(AX) <— (DX, AX) / (SRC) 的商

(DX) <— (DX, AX) / (SRC) 的余数

注意:

* AX (DX,AX) 为隐含的被除数寄存器。

* AL (AX) 为隐含的商寄存器。

* AH (DX) 为隐含的余数寄存器。

* SRC不能为立即数。

* 对所有条件标志位均无定义。如何判别结果有效?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: