8086指令系统

相关英文缩写对照表

缩写
缩写与符号1
指令系统指微处理器能够完成的所有指令的集合  

8086/8088指令集共有115个指令助记符,代表着六大类共91种操作

一、数据传送指令

数据传送指令

1、通用数据传送指令​

MOV:

MOV DST, SRC

将源操作数SRC的一个字或字节,传送到目的操作数DST所指的单元。实质上是一种复制,SRC的内容并不改变。

SRC可以为:REG/SREG/DATA8/16 MEM

DST可以为:REG/SREG/MEM   

传送指令不影响标志位

必须保证源目的操作数位数一致​

DST因为要保存结果因此不能为立即数,也不能是CS​

源和目的操作数不能同为存储器操作数 //要占用总线

不允许两个段寄存器之间传送数据   

立即数不能直接送入段寄存器 //没有对应机械码

​PUSH:

PUSH SRC  

//操作包括SP自减2,压入操作数(先压入高八位在SP+1,低八位SP)

​例:PUSH AX

PUSH

​POP:

POP DST

先将数据取出放入DST,SP自加2回收空间

//只能对字操作,另外POP CS不合法​

POP  

​XCHG:

XCHG OPR1,OPR2 

将两个操作数互换,要求位长相同且不同时为MEM

可以实现寄存器之间或寄存器与存储器之间的数据交换,不允许使用段寄存器

​例:XCHG BX,[BP+SI]  //BP默认对应SS


XLAT(Translate):

AL<-BX+AL

XLAT指令可以把​一种编码表示转换成另一种编码表示

XLAT指令使用前需要将编码表的首地址装入BX,将表的一个索引值装入AL

XLAT的实现过程:将BX的值加上AL作为有效地址EA,取出PA=(DS)x10H+EA所指存储单元的内容送到AL​

2、地址目标传送指令​

LEA(Load Effective Addesss to Register):​

LEA REG, SRC

//(REG)<-EA 把源操作数的有效地址(偏移地址)传送给目的操作数

其源操作数必须是一个内存单元地址,目的操作数必须是16位通用寄存器

MOV BX, OFFSET TABLE Œ可以写为 LEA BX, TABLE。OFFSET速度较快,因为在汇编阶段就已经得出了偏移地址,然后被链接成了立即数传送指令,但是有局限性,只适用于简单变量或标号​。

LDS(Load Pointer to DS):

双字节指针送寄存器和DS指令​

LDS用于完成一个地址指针的传送,因为地址指针包括16位偏移地址和16位段地址,它们存储在由源操作数给出最低地址的四个连续存储单元中,其中低16位为偏移地址,高16位为段地址送入DS

​LDS REG,SRC

​(REG)<-(SRC)

(DS) <-(SRC+2)

​将源操作数指定的存储器中4个连续字节分别传送到目的操作数和DS

LDS
LDS  

​注意低地址对应低字节,高地址高字节

LES(Load Pointer to ES):

功能与LDS类似,只是高字位装入ES​

在使用LEA ,LDS, LES时目的操作数不能是段寄存器,源操作数必须是存储器寻址方式,三条指令均不影响标志位。​

3、​标志传送指令

LAHF (Load AH with Flags)

将标志寄存器低八位装入AH​

SAHF (Store AH into Flags)

将AH内容存入标志寄存器低八位

PUSHF (Push Flags)

将16位标志寄存器压入堆栈保存​

POPF (Pop Flags)

将当前SP所指内容弹入标志寄存器

附:标志寄存器回顾

标志寄存器
标志寄存器

4、I/O指令
​​​

IN(Input from)

IN ACC,PORT  

ACC可以为AL或AX,PORT为输入端口地址​​。允许把一个字节由输入端口传送到AL中,或者把一个字由连续的输入端口传送到AX中。如果端口地址为8位时,可以直接用立即数 表示,超过8位则必须用DX寄存器来保存该端口的地址。

OUT​(Output to)

OUT PORT, ACC

out
I/O例题

答:不可以,如果改成AL,只会输出数据的低八位。

二、​算术运算指令

标志位

执行算术运算指令会运用到标志位

CF​(Carry Flag 进位标志位“)

PF(Parity Flag 奇偶标志位“)

AF(Auxiliary Carry Flag 辅助进位标志,用于BCD码运算)

ZF(Zero Flag 零标志“)

SF(Sign Flag  符号标志“) 

OF(Overflow Flag 溢出标志)‚

算术运算指令
算术运算指令


加减法指令

加减法指令

增量和减量指令

不改变进位标志CF​

  增量和减量指令

​比较指令CMP

比较指令​根据操作数相减的结果设置相应标志位(CF  ZF),不改变操作数本身

CMP

​乘除法指令

MUL    U ; 

​AL×U(8位) → AX,(用于无符号数)

AX×U(16位) →DXAX  

 高半=0,则CF、OF=0,否则CF、OF=1;其余标志不定

IMUL  U 

操作与 MUL 相同  (用于补码)

DIV    U 

 AX÷U8位),商AL,余数AH(用于符号数)

 DXAX÷U(16位),商→AX,余数→DX    

 所有标志不确定

IDIV  U  操作与 DIV U 相同  (用于补码)

MUL

BCD码调整指令​

​DAA:

隐含操作数AL ​

对压缩BCD码加法结果进行修正

​BCD修正规则:

AL低(高)四位大于9 或 AF(CF)=1​    ,    AL<-AL+06H(60H)   AF(CF)<-1

例子:

BCD1 DB 45H

BCD2 DB 71H

 MOV AL,BCD1

ADD AL,BCD2       //AL=B6H   CF=0

DAA                  //AL=16H    CF=1

DAS:

紧跟在SUB或SBB之后,对减法进行修正,同加法​


扩展指令

CBW:

原操作数AL,目的操作数AX​

将AL中的一个字节的带符号数扩展成一个字​

​AL < 80H (即D7 = 0) , (AH) 00H

AL > =80H (即D7 = 1) , (AH) 0FFH

​CWD:

原操作数AX,目的操作数DX,AX​

​AX< 8000H (即D15 = 0) , (DX) 0000H

AX> =8000H (即D15 = 1) , (DX) 0FFFFH

CBW和CWD指令一般用于带符号数除法指令之前

位处理指令

位处理指令

​AND 与 、OR 或、XOR 异或:

运算结果保存到目的操作数,同时将CF设为零

TEST:

 同AND的操作,但不改变目的操作数,可以用来判断某一位是否为零

​SHL/SHR:

逻辑左移/右移​

逻辑左移
逻辑右移

​SAL/SAR:

算术左移/右移​

​算数左移同逻辑左移,算术右移为补最高位右移(如图)

算术右移

​例如 :

补码为1000 0010(原码-111 1100即-124 

SAR之后为1100 0001(原码-011 1110 即-62)

右移一位相当于带符号数算术上除以2,所以称为算术右移


ROL/ROR​:

​循环左移/右移

循环左移
循环右移

​将最高(低)位移到最低(高),并保存在CF中

​RCL/RCR

带进位位的循环左移,右移(用来计算)

带进位位循环左移
带进位位循环右移

​​串操作指令

串操作指令
重复前缀

串操作
串操作

​所用寄存器已经约定。源地址DS SI 目的地址ES DI


程序转移指令​

​无条件转移JMP:

JMP

段内直接转移SHORT

段内直接转移SHORT

段内直接转移NEAR

段内直接转移NEAR

段内间接转移 寄存器

段内间接转移 寄存器

​例如:

机器码FFE1

操作数​为E1 (1110 0001)后三位为001所以对应寄存器为CX 

等同于JMP CX(IP<-CX)

段内间接转移 存储器

段内间接转移 存储器
段内间接转移 存储器2

段间直接转移

段间直接转移

例子:​

JMP WORD PTR [BX]       //段内直接转移,CS不变,送[BX]到IP

JMP DWORD PTR [BX]     //段间直接转移,CS存高位,IP存低位


​无条件转移CALL:

用来调用一个子过程​,与JMP的区别在于,CALL指令保存了断点(硬件自动实现)

段间调用:先将CS压入堆栈,SP=SP-2,然后将IP压入堆栈,SP=SP-2
​段内调用:只将IP压入堆栈,SP=SP-2

​无条件转移RET:

返回指令,子程序返回主程序,恢复断点。

条件转移指令​

条件转移指令
条件转移指令2

标志位操作指令

标志位操作指令



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值