8086 汇编指令集

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8086 汇编指令集

一、数据传输指令

它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.

1. 通用数据传送指令

MOV 传送字或字节.

格式为: MOV DST,SRC

执行的操作:(DST)<-(SRC)

MOVSX 先符号扩展,再传送.

MOVZX 先零扩展,再传送.

PUSH 把字压入堆栈.

格式为:PUSH SRC

执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(SRC)

POP 把字弹出堆栈.

格式为:POP DST

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

PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI 依次压入堆栈.

POPA 把DI,SI,BP,SP,BX,DX,CX,AX 依次弹出堆栈.

PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI 依次压入堆栈.

POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX 依次弹出堆栈.

BSWAP 交换32 位寄存器里字节的顺序

XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)

格式为:XCHG OPR1,OPR2

执行的操作:(OPR1)<-->(OPR2)

CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )

XADD 先交换再累加.( 结果在第一个操作数里)

2. 输入输出端口传送指令.

IN I/O 端口输入. ( 语法: IN 累加器,{端口号│DX} )

长格式为:

IN AL,PORT(字节)

IN AX,PORT(字)

执行的操作:

(AL)<-(PORT)(字节)

(AX)<-(PORT+1,PORT)(字)

短格式为:

IN AL,DX(字节)

IN AX,DX(字)

执行的操作: AL<-((DX))(字节)

AX<-((DX)+1,DX)(字)

OUT I/O 端口输出. ( 语法: OUT {端口号│DX},累加器),输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX 指定时,其范围是0-65535.

长格式为: OUT PORT,AL(字节)

OUT PORT,AX(字)

执行的操作: (PORT)<-(AL)(字节)

(PORT+1,PORT)<-(AX)(字)

短格式为: OUT DX,AL(字节)

OUT DX,AX(字)

执行的操作: ((DX))<-(AL)(字节)

((DX)+1,(DX))<-AX(字)

XLAT 换码指令

字节查表转换,BX 指向一张256 字节的表的起点,AL 为表的索引值

(0-255,即0-FFH);返回AL 为查表结果. 执行的操作: ( [BX+AL]->AL )

格式为: XLAT OPR

或: XLAT

3. 目的地址传送指令.

LEA 装入有效地址. 格式为: LEA REG,SRC

执行的操作:(REG)<-SRC

指令把源操作数的有效地址送到指定的寄存器中.

例: LEA DX,string ;把偏移地址存到DX.

LDS 传送目标指针,把指针内容装入DS.

格式为: LDS REG,SRC

执行的操作:(REG)<-(SRC) (DS)<-(SRC+2)

把源操作数指定的 4 个相继字节送到由指令指定的寄存器及DS 寄存器中.该指令常指定SI寄存器.

例: LDS SI,string ;把段地址:偏移地址存到DS:SI.

LES 传送目标指针,把指针内容装入ES.

格式为: LES REG,SRC

执行的操作: (REG)<-(SRC) (ES)<-(SRC+2)

把源操作数指定的 4 个相继字节送到由指令指定的寄存器及ES 寄存器中.该指令常指定DI寄存器.

例: LES DI,string ;把段地址:偏移地址存到ES:DI.

LFS 传送目标指针,把指针内容装入FS.

例: LFS DI,string ;把段地址:偏移地址存到FS:DI.

LGS 传送目标指针,把指针内容装入GS.

例: LGS DI,string ;把段地址:偏移地址存到GS:DI.

LSS 传送目标指针,把指针内容装入SS.

例: LSS DI,string ;把段地址:偏移地址存到SS:DI.

4. 标志传送指令.

LAHF 标志寄存器传送,把标志装入AH.

格式为: LAHF

执行的操作:(AH)<-(PWS 的低字节)

SAHF 标志寄存器传送,把AH 内容装入标志寄存器.

格式为: SAHF

执行的操作:(PWS 的低字节)<-(AH)

PUSHF 标志入栈.

格式为: PUSHF

执行的操作:(SP)<-(SP)-2 ((SP)+1,(SP))<-(PSW)

POPF 标志出栈.

格式为: POPF

执行的操作:(PWS)<-((SP)+1,(SP)) (SP)<-(SP+2)

PUSHD 32 位标志入栈.

POPD 32 位标志出栈.

二、算术运算指令

ADD 加法.

格式: ADD DST,SRC

执行的操作:(DST)<-(SRC)+(DST)

ADC 带进位加法.

格式: ADC DST,SRC

执行的操作:(DST)<-(SRC)+(DST)+CF

INC 加1.

格式: INC OPR

执行的操作:(OPR)<-(OPR)+1

AAA 加法的ASCII 码调整.

DAA 加法的十进制调整.

SUB 减法.

格式: SUB DST,SRC

执行的操作:(DST)<-(DST)-(SRC)

SBB 带借位减法.

格式: SBB DST,SRC

执行的操作:(DST)<-(DST)-(SRC)-CF

DEC 减1.

格式: DEC OPR

执行的操作:(OPR)<-(OPR)-1

NEC 求反(以0 减之).

格式: NEG OPR

执行的操作:(OPR)<- -(OPR)

CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).

格式: CMP OPR1,OPR2

执行的操作:(OPR1)-(OPR2)

该指令与SUB 指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志. AAS 减法的ASCII 码调整.

DAS 减法的十进制调整.

MUL 无符号乘法.

格式: MUL SRC

执行的操作:

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

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

IMUL 整数乘法.

格式: IMUL SRC

相关文档
最新文档