汇编语言:x86汇编指令大全及其注意事项

目录
  • Part 1:instruction
  • Part 2
    • 2.1 (逻辑)运算、移位等常用指令
    • 2.1 (逻辑)运算、移位等常用指令
    • 2.2 循环移位指令
    • 2.3 数据串操作指令
    • 2.4 逻辑运算指令
    • 2.5 基于大小关系的跳转指令
    • 2.6 基于单标志位的转移指令

Part 1:instruction

积少成多,持续更新。(这将会是一个极其漫长的过程)
表格中各条指令的顺序根据笔者所认为的重要或常用程度进行排序,仅供参考。

Part 2

本表格中所涉及的F是指状态寄存器,CF指进位标志位,其它以此类推。

2.1 (逻辑)运算、移位等常用指令

这一部分记录汇编语言程序设计当中使用频率最高的一部分指令。

2.1 (逻辑)运算、移位等常用指令

这一部分记录汇编语言程序设计当中使用频率最高的一部分指令。

指令 作用 注意事项 示例
mov dest, src 传送指令 1.dest和src不能同时为存储器操作数
2.CS不能作为dest
3.段寄存器之间不能互相传送
4.立即数不能送入段寄存器
mov ax,word ptr[bx+si+2]
add dest,src 加法指令 dest,src不能同时为存储器操作数或段寄存器 add ax,cx
adc dest,src 带进位加法指令 dest=dest+src+CF,常用于多字节加法
inc dest 加一指令 1.此操作不影响CF的状态 inc byte ptr[si]
sub dest,src 减法指令 1.dest,src的要求与add相同
2.触发OF:异号相减且结果的符号为与被减数不同
sub ax,cx
sbb dest,src 带进位减法 常用于多字节减法
dec dest 减一指令 不影响CF的状态,但其他几个标志位都会受到影响 dec ax
mul dest 无符号乘法指 1.dest为字节数据,则与AL相乘,结果放入AX
2.dest为字数据,与AX相乘结果低16位放入AX,高16位放入DX
3.dest不能是立即数
mul ax
imul dest 有符号乘法 细节与mul完全相同,对最高位的解释不同 imul ax
div dest 无符号除法 1.dest为字节数据,用AX除以dest,商放在AL,余数放在AH
2.dest为字数据,用低16位为AX,高16位为DX的双字数据除以dest,商放在AX,余数放在DX
idiv dest 带符号除法 与无符号完全相同。除法溢出时结果无效 idiv ax
cbw 扩展AL为AX字数据 1.仅用于扩展带符号数,无符号直接清零即可
2.不带操作数
cbw
cwd 扩展AX字为DX,AX双字数据 要求与cbw相同 cwd
seg 取标号或变量的段地址 mov di,seg label
lea 取偏移地址 1.与offset作用类似
2.load efficient address的简写
lea ax,label
offset 取偏移地址 1.作用与lea相同
2.速度比lea快
mov ax,offset label
org 设定程序段起始地址(偏移) 1.是origin的缩写
2.若无org默认程序从cs:0开始存放指令代码
3.两个org指令之间空余的空间用0填充
org offsetVal
xlat 转换表指令 1.BX存放表的首地址,AL存放当前表中元素的偏移量
2.不影响F的状态
xlat ;无需操作数

2.2 循环移位指令

循环移位指令非常容易混淆,但是却十分重要,因此需要牢牢记住并时常查阅此表。

指令 作用 注意事项 示例
SHL 逻辑左移指令 1.最高位进入CF中
2.最低位直接用0填充
SHL AH,1
SHR 逻辑右移指令 1.最低位进入CF中
2.最高位直接用0填充
SHR BX,1
SAL 算术左移指令 行为与SHL没有差别 SAL BL,CL
SAR 算术右移指令 1.最低位进入到CF中
2.最高位右移后填充最高位(即用最高位填充最高位)
SAR CL,BX
ROL 循环左移指令 最高位进入到CF中并填充最低位 同上
ROR 循环右移指令 最低位进入到CF中并填充最高位 同上
RCL 带进位循环左移指令 1.最低位由CF填充
2.最高位进入CF
同上
RCR 带进位循环右移指令 1.最高位由CF填充
2.最低位进入CF
同上

2.3 数据串操作指令

重复前缀指令与数据串操作指令连用常常能起到事半功倍的效果,注意使用了大大提升汇编程序的简洁性。

指令 作用 注意事项 示例
lods/lodsw/lodsb 载入数据串指令 1.具体操作:从ds:si读取一个字节/字/双字到AL,AX,EAX中,SI根据DF的值进行增减对应的数值 lodsw ;无需操作数
stos/stosw/stosb 存数据串指令 1.AX/AL的内容存放到ES:DI中
2.指针修改是自动且隐式的
stos/stosw/stosb ;无需操作数
cmps/cmpsb/cmpsw 数据串比较指令 cmps需要两个操作数(数据串首地址),后两个无需操作数,字符串的比较由DI和SI完成 ;NULL
movs/movsb/movsw 数据串传送指令 注意事项参照上方的cmps等的用法 ;NULL
rep/repz/repnz 重复前缀指令 1.当cx的内容不为0时执行操作(先判断)
2.用CLD,STD控制增、减量修改
3.与数据串操作指令结合使用,实现内存拷贝、比较等功能
不需要操作数

2.4 逻辑运算指令

这一部分指令是以我的理解进行划分,所以可能不太精准,有意见欢迎在评论区提出。

指令 作用 注意事项 示例
cmp dest,src 1.比较指令 1.用dest减去src,但不保存结果
2.相减的结果影响F
cmp ax,cx
test dest,src 1.将dest与src相与 可用来测试是否为零等,结果不保存
2.影响F
test ax,ax
neg dest 取补指令,得到相反数 影响F neg ax
not dest 取反指令 1.将操作数每一位按位取反
2.不影响F
not AX

2.5 基于大小关系的跳转指令

在使用了cmp,sub,subb等指令后通常使用如下这些指令衔接以便进行下一步的操作,令程序十分简洁。需要注意的是,根据有符号和无符号数需要选择不同的指令进行基于大小关系的跳转。

无符号数
指令 作用
JA label 大于时跳转
JAE label 大于等于时跳转
JB label 小于时跳转
JBE label 小于等于时跳转
带符号数
指令 作用
JG label 大于时跳转
JGE label 大于等于时跳转
JL label 小于时跳转
JEL label 小于等于时跳转
无符号、带符号通用
JE label 等于时跳转
JNE label 不等于时跳转

2.6 基于单标志位的转移指令

根据标志寄存器F中标志位的状态决定是否进行跳转,通常在进行运算后结合这些指令进行跳转。

指令 作用
JC label CF=1时跳转
JNC label CF=0时跳转
JZ label ZF=1时跳转
JNZ label ZF=0时跳转
JO label OF=1时跳转
JNO label OF=0时跳转
JS label SF=1时跳转
JNS label SF=0时跳转
JP label SF=1时跳转
JNP label PF=0时跳转

Part 3:Loading… …

第一次更新:2020-05-15 15:29
第二次更新:2020-05-22 00:14
第三次更新:2020-05-24 00:24
第四次更新:2020-05-24 21:10

持续更新中… …

到此这篇关于汇编语言:x86汇编指令大全及其注意事项的文章就介绍到这了,更多相关x86汇编指令大全内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 汇编语言:x86汇编指令大全及其注意事项

    目录 Part 1:instruction Part 2 2.1 (逻辑)运算.移位等常用指令 2.1 (逻辑)运算.移位等常用指令 2.2 循环移位指令 2.3 数据串操作指令 2.4 逻辑运算指令 2.5 基于大小关系的跳转指令 2.6 基于单标志位的转移指令 Part 1:instruction 积少成多,持续更新.(这将会是一个极其漫长的过程) 表格中各条指令的顺序根据笔者所认为的重要或常用程度进行排序,仅供参考. Part 2 本表格中所涉及的F是指状态寄存器,CF指进位标志位,其它以

  • 汇编语言指令大全 X86和X87汇编指令大全(带注释)

    目录 一.数据传输指令 1. 通用数据传送指令. 2. 输入输出端口传送指令. 3. 目的地址传送指令. 4. 标志传送指令. 二.算术运算指令 三.逻辑运算指令 四.串指令 五.程序转移指令 六.伪指令 七.处理机控制指令:标志处理指令 浮点运算指令集 1.控制指令 2.数据传送指令 3.比较指令 4.运算指令 其它 一.机械码,又称机器码. 二.需要熟练掌握的全部汇编知识(只有这么多) 三.常见修改(机器码) 四.两种不同情况的不同修改方法 一.数据传输指令 它们在存贮器和寄存器.寄存器和输

  • 汇编语言入门汇编指令及寄存器详解教程

    目录 前言 什么是汇编语言 汇编语言产生的原因 汇编与二进制的关系 寄存器 寄存器作用 存取速度比较 寄存器分类 常用寄存器用途 寄存器EAX.AX.AH.AL的关系 汇编语言指令 数据传送指令 算术运算指令 逻辑运算指令 循环控制指令 转移指令 linux 和 windows 下汇编的区别 总结 前言 我们大都是被高级语言惯坏了的一代,源源不断的新特性正在逐步添加到各类高级语言之中,汇编作为最接近机器指令的低级语言,已经很少被直接拿来写程序了,不过我还真的遇到了一个,那是之前的一个同事,因为在

  • 汇编语言伪指令和汇编指令的区别

    [指令语句] 每一条指令语句在源程序汇编时都要产生可供计算机执行的指令代码(即目标代码),所以这种语句又叫可执行语句.每一条指令语句表示计算机具有的一个基本能力,如数据传送,两数相加或相减,移位等,而这种能力是在目标程序(指令代码的有序集合)运行时完成的,是依赖于汁算机内的中央处理器(CPU).存储器.I/O接口等硬件设备来实现的. [伪指令语句] 伪指令语句是用于指示汇编程序如何汇编源程序,所以这种语句又叫命令语句.例如源程序中的伪指令语句告诉汇编程序:该源程序如何分段,有哪些逻辑段在程序段中

  • 汇编语言 跳转指令与C语言的条件分支

    跳转指令 跳转指令也是一个组的指令,称为j组.其中jmp为无条件跳转,其余为条件跳转 上图为j组指令,可结合条件码访问指令加深理解 在机器指令水平上理解如何对跳转指令编码 如上图,通过反汇编软件得到机器指令与汇编语言,其中左边为机器指令编码,右边为对应汇编语言含义,最左边为每条机器指令地址 jmp指令的对应机器指令有两个字节:eb表示这是jmp指令,03描述跳转信息.值得注意的是,跳转指令进行编码时,采用相对位置编码,如03描述的就是偏移量 结合实例进行理解:在未执行jmp指令时,rip寄存器存

  • C 表达式中的汇编指令

    asm 为 gcc 中的关键字,asm 表达式为在 C代码中嵌套汇编指令,该表达式只是单纯的替换出汇编代码,并不对汇编代码的含义进行解析. asm 表达式有两种形式,第二种 asm-qualifiers 包含了 goto 语句. 第一种形式为常见的用法,AssemblerTemplate 和 OutputOperands 必须存在, 其中 Clobbers 存在需要 InputOperands 也出现. asm asm-qualifiers ( AssemblerTemplate : Outpu

  • C# 通过 inline-asm 解决嵌入x86汇编

    "嵌入"是指什么?资源?注入进程?如果是嵌入资源,那跟嵌入任何其他内容是一样的,vs中只要拖拽就能完成嵌入资源.如果是注入进程,则必须得先将汇编码转为机器码.虽然托管的C#也是能办到,但这似乎是所有人都不推荐的方式. C#可不可以嵌入汇编 可以 在我眼中C#作为一个介于中上层语言是不可能不可以置入汇编代码的 为什么会被我认为中上层语言呢 从C#保留指针就可以看出 我知道有很多人一定不会相信C#可以使用汇编代码 不过C#会比较麻烦C#不可以直接内联汇编(inline-asm)准确的说C#

  • 常用的汇编指令与技巧(收藏)

    1.数据传送指令:mov move r1,r2 /*r1=r2*/ move r1,#4096 /*r1=4096*/ 2.大范围的地址读取指令:ldr ldr r1,=0x123456789 /*r1=0x123456789*/ ldr r1,=label /*获取绝对地址,即label的地址*/ label: -- 3.内存访问指令(当ldr后面没有=号时为内存读取指令) 读取指令:ldr ldr r1 ,[r2,#4] /*将内存地址为r2+4的数据读取到r1中,相当于C语言中的*操作*/

  • 汇编语言:比较指令、跳转指令、JCC的使用

    一.JMP 指令:修改EIP 当前运行的下一条指令 JMP 寄存器/立即数        目标类似:  mov  EIP,寄存器/立即数 CALL指令:  调用函数  CALL 地址A/寄存器        等价:                 PUSH 地址B           :保存call的下一条指令地址,压栈,作为返回值,                MOV EIP,地址A/寄存器            : 将函数首地址作为EIP RET指令:        等价:LEA ESP,

  • 汇编指令:JO、JNO、JB..的使用方法

    汇编指令: JO.JNO.JB.JNB.JE.JNE.JBE.JA.JS.JNS.JP.JNP.JL.JNL.JNG.JG.JCXZ.JECXZ.JMP.JMPE 名称 功能 操作数 操作码 模数 寄存器1 寄存器2 或内存 位移量 立即数 符号 方向 芯片 型号 16位 32位 JO 溢出跳转 短 $70 无 无 无 无 10 无 无 8086 无 无 JNO 不溢出跳转 短 $71 无 无 无 无 10 无 无 8086 无 无 JB 低于跳转 短 $72 无 无 无 无 10 无 无 80

随机推荐