80x86——指令系统(一)

目录

一、数据传送指令

(一)通用数据传送指令

1、MOV——传送指令

2、PUSH——进栈指令和POP——出栈指令

3、所有寄存器进出栈指令

4、XCHG——交换指令

(二)累加器专用传送指令

1、IN——输入指令和OUT——输出指令

2、XLAT——换码指令

(三)地址传送指令

1、LEA——有效地址送寄存器指令

2、LDS、LES、LFS、LGS、LSS——地址指针送寄存器和相应段寄存器指令

(四)标志寄存器传送指令

(五)类型转换指令

二、算术指令

(一)加法指令

(二)减法指令

(三)乘法指令

1、MUL——无符号乘法指令

2、IMUL——带符号数乘法指令

(四)除法指令

1、DIV——无符号除法指令

2、IDIV——带符号数除法指令



 

一、数据传送指令

数据传送指令负责把数据、地址或立即数传送到寄存器或存储器中

数据传送指令包括通用数据传送指令、累加器专用传送指令、地址传送指令和标志寄存器传送指令。

(一)通用数据传送指令

通用数据传送指令又可分为以下指令:

通用数据传送指令

传送指令

带符号扩展传送指令

带零扩展传送指令

进栈指令

出栈指令

所有寄存器进栈指令

所有寄存器出栈指令

交换指令

MOV

MOVSX

MOVZX

PUSH

POP

PUSHA/PUSHAD

POPA/POPAD

XCHG

注:MOVSX和MOVZX都是386以及其后继机型的指令系统,不做介绍。

1、MOV——传送指令

指令格式:

MOV DST,SRC          ;执行操作:(DST) <- (SRC)

注:(1)DST不能是CS;

(2)不影响标志位

(3)DST,SRC不同时为段寄存器。如表所示:4个16位的段地址寄存器

4个16位的段地址寄存器

CS

代码段寄存器

DS

数据段寄存器

SS

堆栈段寄存器

ES

辅助数据段寄存器

(4)立即数不能直接送段寄存器

2、PUSH——进栈指令和POP——出栈指令

PUSH——进栈指令指令格式:

PUSH SRC    ;执行操作:(1) 16位指令:(SP) <-(SP)-2 即((SP)+1,(SP))<-(SRC)
            ;(2) 32位指令:(ESP) <-(ESP)-4 即((ESP)+3,(ESP)+2,(ESP)+1,(ESP))<-(SRC)       

POP——出栈指令指令格式:

POP DST    ;执行操作:(DST) <-((SP)+1,(SP))   (SP) <-(SP)+2
            

注:(1)堆栈:“先进后出”的存储区,存在于堆栈段中,SP在任何时候都指向栈顶

(2)堆栈操作必须以字为单位;

(3)不影响标志位

(4)不能用立即寻址方式

(5)DST为除立即数以及CS寄存器以外的任意数据寻址方式

3、所有寄存器进出栈指令

(1)PUSHA/PUSHAD——所有寄存器进栈指令

指令格式:PUSHA/PUSHAD  

(2)POPA/POPAD——所有寄存器出栈指令

指令格式:POPA/POPAD

4、XCHG——交换指令

指令格式:

XCHG OPR1,OPR2            ;执行操作:(OPR1) <-(OPR2)

注:(1)不影响标志位;

(2)不允许使用段寄存器

(二)累加器专用传送指令

累加器专用传送指令只限于使用AX和AL.

累加器专用传送指令

输入指令

输出指令

换码指令

IN

OUT

XLAT

都不影响标志位

1、IN——输入指令和OUT——输出指令

(1)IN——输入指令

长格式:

IN AL,PORT(字节)     ;执行操作:(AL)<-(PORT)(字节)
IN AL,PORT(字)     ;执行操作:(AX)<-(PORT+1,PORT)(字)

短格式:

IN AL,DX(字节)     ;执行操作:(AL)<-((DX)(字节)
IN AL,DX(字)     ;执行操作:(AX)<-((DX)+1,(DX))(字)

(2)OUT——输出指令

长格式:

OUT PORT,AL  (字节)     ;执行操作:(PORT)<-(AL)(字节)
OUT PORT,AL  (字)     ;执行操作:(PORT+1,PORT)<-(AX)(字)

短格式:

OUT DX,AL  (字节)     ;执行操作:((DX))<-(AL)(字节)
OUT DX,AL  (字)     ;执行操作:((DX)+1,(DX))<-(AX)(字)

注:(1)端口号>=256,端口号——>DX(短格式)

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

2、XLAT——换码指令

指令格式:XLAT或 XLAT OPR

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

注:(1)字节表格长度不超过256,首地址->(BX)

(2)需转换代码->(AL)

(三)地址传送指令

1、LEA——有效地址送寄存器指令

指令格式:

LEA REG,SRC         ;执行操作:(REG)<-SRC

注:不影响标志位

2、LDS、LES、LFS、LGS、LSS——地址指针送寄存器和相应段寄存器指令

指令格式:

LDS REG,SRC         ;(REG)<-(SRC),(DS)<-(SRC+2)或(DS)<-(SRC+4)

注:不影响标志位

(四)标志寄存器传送指令

标志寄存器传送指令

标志送AH指令

AH送标志寄存器指令

标志进栈指令

标志出栈指令

LAHF

SAHF

PUSHF/PUSHFD

POPF/POPFD

(五)类型转换指令

类型转换指令

字节转换为字指令

字转换为双指令

双字节转换为4字指令

字节转换指令

CBW

CWD/CWDE

CDQ

BSWAP

二、算术指令

算术指令是用来执行算术运算的指令。在80x86中主要有加法指令、减法指令、乘法指令、除法指令和十进制调整指令。

(一)加法指令

指令分类

指令格式

执行操作

加法指令

ADD DST,SRC

(DST)<-(SRC)+(DST)

带进位加法指令

ADC DST,SRC

(DST)<-(SRC)+(DST)+CF

加1指令

INC OPR

(OPR)<-(OPR)+1

注:(1)除INC指令不影响CF标志外,均对条件标志位有影响

(2)加法指令对条件标志位(CF/OF/ZF/SF)有影响。

SF

ZF

CF

OF

1:结果为负;0:结果为正

结果为0,ZF=1;否则ZF=0

和的最高有效位有向高位的进位,CF=1;否则CF=0;

两个操作数符号相同,而结果符号与之相反,OF=1;否则OF=0;

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

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

(二)减法指令

减法指令

指令格式

执行操作

减法指令SUB

SUB DST,SRC

(DST)<-(DST)-(SRC)

带进位减法指令SBB

SBB DST,SRC

(DST)<-(DST)-(SRC)-CF

减1指令DEC

DEC OPR

(OPR)<-(OPR)-1

求补指令NEG

NEG OPR

(OPR)<-0-(OPR)

比较指令CMP

CMP OPR1,OPR2

(OPR1)-(OPR2)

比较并交换指令CMPXCHG

CMPXCHG DST,SRC

累加器AC与DST比较,如果(AC)=(DST),则ZF<-1,(DST)<-(SRC);否则ZF<-0,(AC)<-(DST)

(三)乘法指令

1、MUL——无符号乘法指令

指令格式:MUL SRC

执行操作:

字节操作:(AX)<-(AL)*(SRC)

字操作:(DX,AX)<-(AX)*(SRC)

对CF/OF的影响,当CF/OF=00时,乘积的高一般为零,当CF/OF=11时,乘积的高一般为1,

2、IMUL——带符号数乘法指令

指令格式:IMUL SRC

对CF/OF的影响,当CF/OF=00时,乘积的高一半是低一半的符号扩展。

注意:(1)AL(AX)为隐含的乘法寄存器

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

(3)SRC不能为立即数

(4)除了CF和OF外,对条件标志位无定义

(四)除法指令

1、DIV——无符号除法指令

执行操作:

指令格式:DIV SRC

字节操作:(AL)<-(AX)/(SRC)的商,(AH)<-(AX)/(SRC)的余数。

字操作:(AX)<-(DX,AX)/(SRC)的商,(DX)<-(DX,AX)/(SRC)的余数。

2、IDIV——带符号数除法指令

指令格式:IDIV SRC

注意:(1)AL(AX)为隐含的商的寄存器

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

(3)SRC不能为立即数

(4)除了CF和OF外,对条件标志位无定义。

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯择微韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值