8086指令备忘录

数据传输指令

通用数据传送指令

MOV DST,SRC #将源操作数的数据传送到目的操作数中

说明:1.指令中两个操作数不能同为存储器操作数

2.CS不能作为目标操作数(代码段寄存器不可随意更改)

3.段寄存器之间不能相互传送

4.立即数不能直接放入段寄存器

5.MOV指令不影响标志位

堆栈操作指令

PUSH SRC #将源操作数压入堆栈(压入一个字单元),并使SP减2

POP DST #将当前SP指向的一个字单元弹出到目的操作数中,并使SP加2

说明:1.堆栈数据的压入与弹出必须以字单位执行

2.这两条指令不能用立即寻址方式,POP指令不能使用CS段寄存器(cs不能随意更改,但其值可被压入堆栈)

3.这两条指令不影响标志位

地址传送指令

LEA REG,SRC #将源操作数的有效地址(16位的偏移地址)送到指定的寄存器中REG(register)

说明:1.目的操作数REG是一个16位的通用寄存器

2.REG不能是段寄存器

3.该指令不影响标志位

LDS REG,SRC#将源操作数的指定的4个连续字节中的内容作为地址,送到指定寄存器中,其中前两个字节作为偏移地址送到REG中,后两个字节作为段地址存入DS段寄存器中

LES REG,SRC#与LDS相似,只不过将后两个字节作为段地址存入ES段寄存器中。

说明:1.REG不能为段寄存器

2.两个指令均不影响标志位

标志寄存器传送指令

LAHF #将标志寄存器中的低八位传送至AH中。

SAHF#与上条指令相反:将AH中数据传送到标志寄存器的低八位,不影响高八位

PUSHF#把标志寄存器推入堆栈,同时修改SP减2,该指令不影响标志位

POP#将当前堆栈所指的字单元传送给标志寄存器,同时修改SP加2

数据交换指令

XCHG DST,SRC#将源操作数与目的操作数交换

说明:1.允许在寄存器之间,寄存器与存储器单元之间完成一个字或字节数据的交换

2.DST,SRC不能是段寄存器,立即数,IP寄存器

3.DST,SRC中,必须有一个是寄存器寻址,两个存储器单元不能交换数据

4.该指令不影响标志位

输入/输出指令

IN DST ,SRC#将端口数据传送到AL或AX寄存器中

OUT DST ,SRC#将AL或AX寄存器中的数据传送到端口中

说明:1.装数据的是AL或AX,装端口的是一个8位立即数

2.当端口地址较大,可将地址转入DX寄存器中间接寻址

算数运算指令

加法与减法指令

ADD DST,SRC# 不带进位加法,SRC+DST的值放到DST中

说明:操作数为带符号数

ADC DST,SRC#带进位加法,SRC+DST+CF的值放到DST中

说明:1.操作数为带符号数

2.用于多字节加法,可以加上低位的进位

INC DST#自增,DST+1的值放到DST中

说明:不影响CF标志位

SUB DST,SRC#不带进位减法,SRC-DST的值放到DST中

SBB DST,SRC#带进位减法,SRC-DST-CF的值放到DST中

DEC DST#自减,DST+1的值放到DST中

说明:不影响CF标志位

NEG DST#取相反数指令,DST-0的值放到DST中

说明:无论DST是正是负,对其每一位(包括符号位)取反加一

CMP DST,SRC#比较指令,SRC-DST并设置标志位

说明:1.仅仅改变标志寄存器内容

2.操作数可以是带符号数也可以是不带符号数

3.CMP AX,BX #当OF=SF则AX>BX;当OF!=SF则AX<BX

乘法除法指令

IMUL SRC#带符号乘法

说明:1.两个8位数相乘SRC*AL的值放到AX(高八位放AH,低八位放AL)中

2.两个16位数相乘SRC*AX的值放到AX和DX(高八位放DX,低八位放AX)中

MUL SRC#无符号乘法,SRC*AL的值放到AX中

IDIV SRC#带符号除法

说明:1.两个8位数相除AX/SRC的值放到AX(AL放商,AH放余数)中

2.两个16位数相除,DX与AX组成16位被除数/SRC的值放到AX与DX(AX放商,DX放余数)中

DIV SRC#无符号除法

逻辑运算指令

AND DST,SRC#源操作数与目的操作数进行与运算结果放到DST中

说明:1.可以用AND指令实现位清零:AND AL,0FH

TEXT DST,SRC#DST与SRC做与运算

说明:1.与AND的区别是不将运算结果放到DST

2.仅仅改变标志位

3.可以用来判断某位是否为0:TEXT AL,01H #判断AL最低位是否为0,若ZF=1则最低位为零

OR DST,SRC#源操作数与目的操作数进行或运算结果放到DST中

说明:1.可以使某些位置1,其余位不变:OR AL,80H

XOR DST,SRC#DST与SRC进行异或运算(相同为0,不同为1)

说明:1.异或值=两数相减值

2.与1做异或取反,与0做异或不变

NOT DST#DST中按位取反

说明:1.取反其实就是求补数(不是补码):FEBCH=0143H(0=F-F,1=F-E,4=F-B,3=F-C)

注意:NOT不影响标志位,其余四条指令使CF与OF为0,对AF无定义,结果设置SF,PF,ZF。

移位指令

移位指令

左移:

算数左移:SAL(arithmetic shift left) DST,COUNT#将DST按位向左移动,count为位移次数

逻辑左移:SHL (head shift left)DST,COUNT

说明:1.左移一位相当于DST*2,左移两位相当于DST*4

2.右边补0

3.如果COUNT为1,则在指令中可直接指出,如果大于1则由CL寄存器间接给出

右移:

算数右移:SAL DST,COUNT#将DST按位向右移动,count为位移次数

逻辑右移:SHL DST,COUNT#

说明:1.右移一位相当于DST/2

2.算数右移适用于有符号数,左侧补无效数字(若是负数补1,若是正数补0),逻辑右移适用于无符号数,左侧补0

注意:左移会发生溢出,右移不会

移位循环指令

循环左移:ROL(rotate left)DST,COUNT#最左侧一位移到最右侧;每移动一次,数据传到CF

循环右移:ROR DST,COUNT

带进位循环左移:RCL(rotate carry left)DST,COUNT#带着CF一起循环移动

带进位循环右移:RCR DST,COUNT

程序控制指令

转移指令

段内转移:

段内直接转移:

短转移:JMP SHORT OPR#8位位移量+IP, OPR为转移目标

近转移:JMP NEAR PTR OPT#16位位移量+IP

说明:直接转移只改变IP大小

段内间接转移:

JMP OPR1#通过OPR1间接转移

说明:1.OPR为16位寄存器或存储器寻址方式

2.OPR中的数据作为有效偏移地址直接赋给IP

3.段内寻址只改变IP的值

段间转移:

段间直接转移:远转移JMP FAR PTR ORP#

说明:将指定的转移目标地址的EA放到IP,段地址放到CS

段间间接转移:JMP DWORD PTR OPR #OPT为寄存器或者存储器寻址

说明:将OPR指定的EA赋值给IP,EA加2给到CS中

条件转移指令

简单条件转移指令

JC OPR#CF=1时跳转

JNC OPR#CF=0时跳转

JS OPR#SF=1时跳转

JNS OPR#SF=0时跳转

JO OPR#OF=1时跳转

JNO OPR#OF=0时跳转

JZ/JE OPR#ZF=1时跳转

JNZ/JNE OPR#ZF=0时跳转

JP/JPE OPR#PF=1时跳转

JNP/JPO OPR#PF=0时跳转

无符号条件转移指令

JA(above)/JNBE OPR#CF=0且ZF=0 大于/不小于等于

JAE/JNB OPR#CF=0且ZF=1 大于等于/不小于

JB(belw)/JNAE OPR#CF=1且ZF=0 小于/不大于等于

JBE/JNA OPR#CF=1且ZF=1 小于等于/不大于

带符号条件转移指令

JG/JNLE OPR#SF=OF且ZF=0 大于/不小于等于

JGE/JNL OPR#SF=OF或ZF=1 大于或等于/不小于

JL/JNGE OPR# SF!=OF且ZF=0小于/不大于等于

JLE/JNG OPR# SF!=OF 或ZF=1小于等于/不大于

循环控制指令

LOOP OPR#

说明:1.循环次数写进CX中,每次程序运行到该指令时CX里的次数减一,一直到CX减完为止

处理器控制指令

CLC(clear c)#CF置零

STC(set c)#CF置1

CLD#DF置0

STD#DF置1

CLI#IF置0

STI#IF置1

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值