80×86汇编常用指令

一.数据传送指令

1. 通用数据传送指令

简写 英文全称 执行操作
MOV move 传送
MOVSX move with sign-extend 带符号扩展传送
MOVZX move with zero-extend 带零扩展传送
PUSH push onto the stack 进栈
POP pop from the stack 出栈
PUSHA/PUSHAD push all registers 所有寄存器进栈
POPA/POPAD pop all registers 所有寄存器出栈
XCHG exchange 交换

MOV传送指令

格式:MOV DST, SRC

执行操作: (DST)←(SRC)

其中DST表示目的操作数,SRC表示源操作数

具体形式:

格式 具体操作
MOV mem/reg1,mem/reg2 两个操作数中有一个为寄存器(不能为段寄存器),另个一为存储器
MOV reg , data reg指定寄存器(不能为段寄存器),data为立即数
MOV ac,mem ac为累加器
MOV mem,ac
MOV segreg,mem/reg segreg指定段寄存器,不能使用CS寄存器,执行完这条指令后不中断
MOV mem/reg,segreg
MOV mem/reg,data

PUSH出栈指令

格式:POP DST

执行操作:16位指令: (DST)←((SP)+1,(SP))

​ (SP)←(SP)+2

​ 32位指令: (DST)←((ESP)+3,(ESP)+2,(ESP)+1,(ESP))

​ (ESP)←(ESP)+4

PUSH POP
PUSH reg POP reg
PUSH mem POP mem
PUSH segreg POP segreg
PUSH data POP不允许立即数寻址方式

PUSHA/PUSHAD所有寄存器进栈指令

格式:PUSHA

​ PUSHAD

执行操作:

​ PUSHA:16位通用寄存器依次进栈,进栈次序为AX,DX,CX,BX,指令执行前的SP,BP,SI,DI。指令执行后(SP)←(SP)-16仍指向栈顶

​ PUSHAD:32位通用寄存器依次进栈,进栈次序为EAX,ECX,EDX,EBX,指令执行前的ESP,EBP,ESI,EDI。指令执行后(SP)←(SP)-32

POPA/POPAD所有寄存器出栈指令

格式:POPA

​ POPAD

执行操作:

​ POPA:16位通用寄存器依次出栈,出栈次序为DI,SI,BP,SP,BX,DX,CX,AX,指令执行后(SP)←(SP)+16仍指向栈顶,注:SP的出栈只是修改了指针使其后的BX能顺利出栈,而堆栈中原先由PUSHA指令存入的SP的原始内容被丢弃,并未真正送到SP寄存器中

​ POPAD:32位通用寄存器依次出栈,出栈次序为EDI,ESI,EBP,ESP,EBX,EDX,EAX。指令执行后(ESP)←(ESP)+32仍指向栈顶。与POPA相同,堆栈中存放的原ESP的内容被丢弃而不装入ESP寄存器

XCHG交换指令

格式为:XCHG OPR1,OPR2

执行操作:(OPR1)←→(OPR2)

2.累加器专用传送指令

IN输入指令

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

​ IN AX,PORT(字)

​ IN EAX,PORT(双字)

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

​ (AX)←(PORT+1,PORT)(字)

​ (EAX)←(PORT+3,PORT+2,PORT+1,PORT)(双字)

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

​ IN AX,DX(字)

​ IN EAX,DX(双字)

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

OUT输出指令

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

​ OUT PORT,AX(字)

​ OUT PORT,EAX(双字)

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

​ (PORT+1,PORT)←(AX)(字)

​ (PORT+3,PORT+2,PORT+1,PORT)←(EAX)(双字)

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

​ OUT DX,AX(字)

​ OUT DX,EAX(双字)

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

​ ((DX+1,DX))←(AX)(字)

​ ((DX)+3,(DX)+2,(DX)+1,(DX))←(EAX)(双字)

XLAT换码指令

格式: XLAT OPR

​ 或XLAT

执行的操作:

​ 16位指令: (AL)←((BX)+(AL))

​ 32位指令: (AL)←((EBX)+(AL))

3.地址传送指令

简写 英文全称 执行操作
LEA load effective address 有效地址送寄存器
LDS load DS with pointer 指针送寄存器和DS
LES load ES with pointer 指针送寄存器和ES
LFS load FS with pointer 指针送寄存器和FS
LGS load GS with pointer 指针送寄存器和GS
LSS load SS with pointer 指针送寄存器和SS

LEA有效地址送寄存器

格式: LEA REG,SRC

执行操作: (REG)←SRC

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

LDS,LES,LFS,LGS,LSS指针送寄存器和段寄存器指令

格式以LDS为例: LDS REG,SRC

执行的操作: (REG)←(SRC)

​ (SREG)←(SRC+2)(16位)

或 (SREG)←(SRC+4)(32位)

指令把该存储单元里的偏移地址(SRC)装入给寄存器,然后把(SRC+2)或(SRC+4)中的数装入指定的段寄存器

4.标志寄存器传送指令

简写 英文全称 执行操作
LAHF load AH with flags 标志送AH
SAHF store AH into flags AH送标志寄存器
PUSHF/PUSHFD push the flags or eflags 标志进栈
POPF/POPFD pop the flags of eflags 标志出栈

5.类型转换指令

简写 英文全称 执行操作 格式
CBW convert byte to word 字节转换为字 CBW
CWD convert word to double word 字转换为双字 CWD
CDQ convert double to quad 双字转换为4字 CWDE
BSWAP byte swap 字节交换(14交换,23交换) BSWAP r32(32位寄存器)

二.算术指令

1.加法指令

简写 英文全称 执行操作
ADD add 加法
ADC add with carry 带进位加法
INC increment 加1
XADD exchange and add 交换并相加

2.减法指令

简写 英文全称 执行操作
SUB subtract 减法
SBB subtract with borrow 带借位减法
DEC decrement 减1
NEG negate 求补
CMP compare 比较
CMPXCHG compare and change 比较并交换
CMPXCHG8B compare and exchange 8 byte 比较并交换8字节

3.乘法指令

简写 英文全称 执行操作
MUL unsigned multiple 无符号数乘法
IMUL signed multiple 有符号数乘法

4.除法指令

简写 英文全称 执行操作
DIV unsigned divide 无符号数除法
IDIV divide 有符号数除法

5.十进制调整指令

三.逻辑指令

1.逻辑运算指令

简写 英文全称 执行操作
AND and 逻辑与
OR or 逻辑或
NOT not 逻辑非
XOR exclusive or 异或
TEST test 测试

2.移位指令

简写 英文全称 执行操作
SHL shift logical left 逻辑左移
SAL shift arithmetic left 算数左移
SHR shift logical right 逻辑右移
SAR shift arithmetic right 算术右移
ROL rotate left 循环左移
ROR rotate right 循环右移
RCL rotate left through carry 带进位循环左移
RCR rotate right through carry 带进位循环右移
SHLD shift left double 双精度左移
SHRD shift right double 双精度右移

四.串处理指令

简写 英文全称 执行操作
MOVS move string 串传送
CMPS compare string 串比较
SCAS scan string 串扫描
LODS load from string 从串取
STOS store in to string 存入串
INS input from port to string 串输入
OUTS output string to port 串输出

与上述指令配合使用的前缀有:

简写 英文全称 执行操作
REP repeat 重复
REPE/REPZ repeat while equal/zero 相等/为零则重复
REPNE/REPNZ repeat while not equal/not zero 不相等/不为零则重复

建立方向标志的指令

简写 英文全称 执行操作
CLD clear direction flag 使DF=0,在执行串处理指令时可使地址自动增量
STD set direction flag 使DF=1,在执行串处理指令时可使地址自动减量

串处理指令大部分形式都有三种, 以MOVS为例,MOVS , MOVSB, MOVSW

五.控制转移指令

1.无条件转移指令

JMP 跳转指令

2.条件转移指令

(1)根据单个条件标志的设置进行情况进行转移

简写 英文全称 执行操作 格式 测试条件
JZ(或JE) jump if zero,or equal 结果为零(或相等)则转移 JZ(或JE) OPR ZF=1
JNZ(或JNE) jump If not zero,or not equal 结果不为零(或不相等)则转移 JNZ(或JNE) OPR ZF=0
JS jump if sign 结果为负则转移 JS OPR SF=1
JNS jump if not sign 结果为正则转移 JNS OPR SF=0
JO jump if overflow 溢出则转移 JO OPR OF=1
JNO jump if not overflow 不溢出则转移 JNO OPR OF=0
JP(或JPE) jump if parity ,or parity even 奇偶位为1则转移 JP(或JPE) OPR PF=1
JNP(或JPO) jump If not parity,or parity odd 奇偶位为0则转移 JNP(或JPO) OPR PF=0
JB(或JNAE,或JC) jump if below, or not above or equal, or carry 低于,或者不高于或等于,或进位为1则转移 JB(或JNAE,或JC) OPR CF=1
JNB(或JAE,或JNC) jump if not below,or above or equal,or not carry 不高于,或者高于或等于,或进位为零则转移 JNB(或JAE,或JNC) OPR CF=0

(2)比较两个无符号数,并根据比较的结果转移

简写 英文全称 执行操作 格式 测试条件
JB(或JNAE,或JC) jump if below,or not not above or equal,or carry 低于,或者不高于或等于,或进位为1则转移 JB(或JNAE,或JC) OPR CF=1
JNB(或JAE,或JNC) jump if not below ,or above or equal, or not carry 不高于,或者高于或等于,或进位为零则转移 JNB(或JAE,或JNC) OPR CF=0
JBE(或JNA) jump if below or equal,or not above 低于等于,或不高于则转移 JNBE(或JA) OPR CF∪ZF=0
JNBE(或JA) jump if not below or equal, or above 不低于或等于,或高于则转移 JNBE(或JA) OPR CF∪ZF=1

(3)比较两个带符号数,并根据比较结果转移

简写 英文全称 执行操作 格式 测试条件
JL(或JNGE) jump if less,or not greater or equal 小于,或者不大于或等于则转移 JL(或JNGE) OPR SF异或OF=1
JNL(或JGE) jump if not less, or greater or equal 不小于,或者大于或等于则转移 JNL(或JGE) OPR S异或OF=0
JLE(或JNG) jump if less or equal,or not greater 小于或等于,或者不大于则转移 JLE(或JNG) OPR (SF异或OF)∪ZF=1
JNLE(或JG) jump if not less or equal, or greater 不小于或等于,或者大于则转移 JNLE(或JG) OPR (SF异或OF)∪ZF=0

(4).测试CX或ECX的值为0则转移指令

简写 英文全称 执行操作 格式 测试条件
JCXZ jump if CX register is zero CX寄存器的内容为零则转移 JCXZ OPR (CX)=0

3.条件设置指令(386)

4.循环指令

简写 英文全称 执行操作 格式 测试条件
LOOP loop 循环 LOOP OPR (Count Reg)≠0
LOOPZ/LOOPE loop while zero, or equal 当为零或相等时循环 LOOPZ(或LOOPE) OPR ZF=1且(Count Reg)≠0
LOOPNZ/LOOPNE loop while nonzero, or not equal 当不为零或不相等时循环 LOOPNZ(或LOOPNE) OPR ZF=0且(Count Reg)≠0

其中的Count Reg为计数寄存器,16位指令用CX寄存器,32位指令用ECX寄存器

5.子程序(subroutine)

简写 英文全称 执行操作 格式
CALL call 调用 CALL DST
RET return 返回 RET或RET EXP

6.中断

简写 英文全称 执行操作 格式
INT interrupt 中断 INT TYPE
INTO interrupt if overflow 如溢出则中断 INTO
IRET/IRETD return from interrupt 从中断中返回 IRET(IRETD)

六.处理机控制与杂项操作指令

1.标志处理指令

简写 英文全称 执行操作 符号表述
CLC clear carry 进位标志位置0 CF←0
CMC complement carry 进位标志位求反 CF←CF‾\overline{CF}CF
STC set carry 进位位置1 CF←1
CLD clear direction 方向标志位置0 DF←0
STD set direction 方向标志位置1 DF←1
CLI clear interrupt 中断标志置0 IF←0
STI set interrupt 中断标志置1 IF←1

2.其他处理机控制与杂项操作指令

简写 英文全称 执行操作
NOP no operation 无操作
HLT halt 停机
ESC escape 换码
WAIT wait 等待
LOCK lock 封锁
BOUND bound 界限
ENTER enter 建立堆栈帧
LEAVE leave 释放堆栈帧

80×86汇编常用指令相关推荐

  1. 8086汇编常用指令(待解释)

    一.数据传送指令 mov push pop pushf popf xchg 二.算术运算指令 add sub adc sbb inc dec cmp imul idiv aaa 三.逻辑指令 and ...

  2. cortex-A7 ARM 汇编常用指令 终极总结

    1.处理器内部常用数据传输指令 MOV R0  R1    // 通用寄存器互传 MRS R0 CPSR   // 特殊寄存器 向 通用寄存器传 MSR CPSR R1   // 通用寄存器 向 特殊 ...

  3. cmp 字节 汇编_汇编 常用指令 cmp jmp call ret

    cmp 指令 功能相当于减法指令 只是不保存结果 不过cmp执行后会影响标志位 其它指令 通过识别标志位 来得知比较的结果 CPU在执行cmp指令时 像add sub指令一样 也包含两种含义 (有符号 ...

  4. ARM汇编常用指令汇总

    文章目录 ARM常见汇编指令的汇总 1.EQU 2.AREA 3.DCD 4. ENTRY 5. START 6. LDR 7. STR 8.BEQ 9.MSR/MRS 10.B/BL/BX 11.P ...

  5. ARM 汇编常用指令

    1.adr指令 adr是小范围的地址读取伪指令,ldr是大范围的读取地址伪指令.可实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32为立即数或一个地址到指 ...

  6. 8086汇编LEA指令总结

    1.格式: LEA OPRD1,OPRD2  (本指令对标志位无影响) OPRD1 为目的操作数,可为任意一个16位的通用寄存器.除段寄存器外 OPRD2 为源操作数,可为变量名.标号或地址表达式.除 ...

  7. 8086汇编常用代码总结(个人向),包含换行函数(过程),执行输出,结束程序

    输出换行函数: printH: MOV DX,0AH;换行 MOV AH,02H INT 21H;执行输出 RET 使用方式: CALL printH 输出变量 MOV AX,DATA;代码段赋值 M ...

  8. 微机原理8086汇编语言上机——Masm环境搭建与常用汇编调试指令

    学校的微机原理与接口技术课,最近开始 考古 上机实验了. 1.弯路 为什么不用宇宙最强大的IDEL--Visual Studio呢? 在我的Visual Studio专栏中有一篇文章介绍Visual ...

  9. 8086 汇编指令手册查询(转)

    8086 汇编指令手册查询,编语言是一种面向机器的语言.它能够利用计算机所在硬件性并能直接控制硬件,在微型计算机系统的开发应用和过程控制和特别受到重视. 一.数据传输指令 -------------- ...

最新文章

  1. lodash 提取前N个元素 take
  2. NFV — Overview
  3. 根据用户的生命周期,实现个性化的运营策略
  4. 声明式事务和编程式事务
  5. 名词解释失效安全_09失效分析复习题新
  6. activiti搭建
  7. 在JS 中使用 fetch 初体验
  8. 适合 Kubernetes 初学者的一些实战练习 (三)
  9. 【专升本计算机】专升本计算机期末考试复习题(B卷附答案)
  10. [HDU] 1533 Going Home
  11. C# async await
  12. Jenkins创建新任务
  13. 电脑硬盘数据不小心格式化后,恢复数据的方法介绍
  14. printf() 输出数据格式汇总
  15. 美通企业日报 | 三大因素最影响职场女性心理健康;Instagram重要性超过推特脸书...
  16. 在jsp页面上直接打开pdf文档
  17. 【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口
  18. 服务器显示拥挤进不去怎么办,《拥挤城市》游戏进不去怎么办 玩不了解决方法...
  19. adb push文件夹
  20. 计算机技术专业门类,计算机科学与技术专业属于什么门类

热门文章

  1. 让一个DIV对齐到底部
  2. 接收终端Request.InputStream阅读
  3. centos 5.4 nfs服务器搭建
  4. VB6中的面向对象编程---实现类继承
  5. 补CEGUIFont_xmlHandler.cpp
  6. APP启动页HTML,启动页.html
  7. 按季度分类汇总_1分钟实现:按某列内容分类汇总,分页打印 Excel 表格
  8. powerbuilder查询符合条件的数据并且过滤掉其他数据_SQL语句之逻辑查询处理阶段...
  9. 2016年日本计算机专业排名,2016年国大学排名计算机专业排名情况.doc
  10. 计算机网络具有双重性特点,计算机网络(本)_201806_模拟卷2_答案