8086 汇编指令集
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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