汇编指令简介

内存操作

NOP        (无操作)运行这条指令不会对寄存器,内存以及堆栈造成任何影响。

PUSH       将操作数压入堆栈中。

PUSHAD   指令把所有通用寄存器的内容按一定顺序压入到堆栈中

POP          出栈:它会取出堆栈顶部的第一个字母或者第一个值,然后存放到指定的目标地址内存单元中。

POPAD     该指令与PUSHAD正好相反,它从堆栈中取值,并将它们放到相应的寄存器中。

MOV         该指令将第二个操作数赋值给第一个操作数,例如: MOV EAX, EBX; EBX值赋值给EAX。

LEA          取地址指令,类似于MOV指令, 但是第一个操作数是一个通用寄存器,并且第二个操作数是一个内存单。

XCHG       交换 寄存器/内存单元 和 寄存器 该指令交换两个操作数的值,例如:XCHG EAX,ECXEAX的值将被存放到ECX中。

数学指令

INC和DEC      这两个指令分别是执行增加和减少的操作,如果是INC指令的话,就加1,如果是DEC指令的话,就减1。

ADD         ADD指令有两个操作数,相加后的结果存放到第一个操作数中。ADD EAX,1等价于INC EAX。

ADC         带进位的加法,在这种情况下,两个操作数的和加上进位标志的值,结果存放到第一个操作数中。

SUB   这个指令与ADD刚好相反-它将第一个操作数减去第二个操作数的值存放到第一个操作数中。

SBB         该指令跟ADC正好相反,它计算两个操作数的差值,并且还要减去进位标志,结果存放到第一个操作数中。

MUL         无符号数的乘法,有两种乘法,第一个种是MUL,这种是无符号数乘法,只有一个操作数,另一个操作数是EAX,结果存放到EDX:EAX中。

IMUL       有符号数的乘法,IMUL指令用法类似于MUL。IMUL ECX该指令将有有符号数ECX乘以EAX,结果存放到EDX:EAX中。

DIV    除法指令。被除数和操作结果商放在EAX中,余数放在EDX中。

CDQ         本来EAX中有个值,正或负都可以,CDQ 把这个32位扩展成64位。变成EDX:EAX的形式,其中EDX中的值是EAX中的最高位,也可以说是符号位。很久前,指令集规定除数必须是被除数的一半长,就一直沿用下来。IDIV有符号除法 除数是32位,那么被除数当然需要64位了,然后就用EDX来扩展EAX的符号位,这样既不改变EAX的值,又扩展成64位。

逻辑操作

AND、OR、XOR 、NOT   与、或、异或、非

比较和条件跳转

CMP         该指令是比较两个操作数,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1。CMP EAX, ECX,EAX与ECX相减,它们本身的值并不改变,只是根据它们相减的结果来决定零标志位Z是否置1。

TEST        逻辑比较,该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位(比如说,SF,ZF,PF标志位),程序可以根据结果来决定是否跳转到相应的分支。下面有几个例子:TEST EAX,EAX。你会说,如果EAX与自己做比较呢?用这个指令,可以确定EAX是否等于0。

JMP – 跳转                                             JE, JZ – 结果为零则跳转                        JNE, JNZ – 结果不为零则跳转                    

JS – 结果为负则跳转                                  JNS – 结果不为负则跳转                         JP, JPE – 结果中1的个数为偶数则跳转      

JNP, JNPE – 结果为1的个数为奇数则跳转      JO – 结果溢出了则跳转                           JNO – 结果没有溢出则跳转  JB, JNAE – 小于则跳转 (无符号数)

JNB, JAE – 大于等于则跳转 (无符号数)         JBE, JNA – 小于等于则跳转 (无符号数)     JNBE, JA – 大于则跳转(无符号数)               

JL, JNGE –  小于则跳转 (有符号数)              JNL, JGE – 大于等于则跳转 (有符号数)     JLE, JNG – 小于等于则跳转 (有符号数)

JNLE, JG – 大于则跳转(有符号数)

转移指令

CALL      转移到指定的子程序,操作数即为目标地址。将当前的EIP压入栈中并转移,相当于PUSH EIP, JMP  [] 。

RET        返回调用程序,相当于POP EIP。

时间: 2024-10-03 21:21:15

汇编指令简介的相关文章

8086cpu-intel汇编指令简介

jcxz   有条件跳转指令,cx为跳转条件.如果(cx)==0则跳转到指定标号处.跳转地址在机器码中已相对位置(-128~127)给出. 相当于                if((cx)==0) jump short 标号 用法: jcxz 标号 loop  循环指令,循环条件同样以cx给出,(cx)!=0时跳转到指定标号处,(cx)==0不跳转,继续执行下一条指令. 用法: loop   标号 例如:                       -- s  -- -- loop s ca

GNU ARM 汇编指令

http://blog.chinaunix.net/u2/87718/showart_1683402.html GNU ARM 汇编指令简介第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初始化完成后就可以跳转到C代码执行.需要注意的是,GNU的汇编器遵循AT&T的汇编语法,可以从GNU的站点(www.gnu.org)上下载有关规范. 一. Linux汇编行结构任何汇编行

几种基本汇编指令详解

几种基本汇编指令详解 常见寄存器 寄存器 16位 32位 64位 累加寄存器 AX EAX RAX 基址寄存器 BX EBX RBX 计数寄存器 CX ECX RCX 数据寄存器 DX EDX RDX 堆栈基指针 BP EBP RBP 变址寄存器 SI ESI RSI 堆栈顶指针 SP ESP RSP 指令寄存器 IP EIP RIP 汇编指令 mov movb(8位).movw(16位).movl(32位).movq(64位) 寄存器寻址: movl %eax, %edx eax -> edx

8086汇编指令速查手册

一.常用指令 二.算术运算指令 三.逻辑运算指令四.串指令 五.程序跳转指令------------------------------------------ 计算机寄存器分类简介: 32位CPU所含有的寄存器有:4个数据寄存器(EAX.EBX.ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1.数据寄存器数据寄存器主要用来保存操作数和运算结

3.6 MIPS指令简介

计算机组成 3 指令系统体系结构 3.6 MIPS指令简介 MIPS秉承着指令数量少,指令功能简单的设计理念.那这样的设计理念是如何实现的呢?在这一节,我们就将来分析MIPS指令的特点. 相比于X86指令所提供的动辄上千页的指令说明,MIPS指令只用这两页纸就可以说清楚了. MIPS指令的基本格式就分为这三种:R型,I型和J型. R型指的是寄存器型: I型指的是立即数型: J型指的是转移型. 我们用这张表对MIPS的指令进行不同纬度的分类,横轴是按照指令的格式分为R型.I型和J型,纵轴则是根据指

汇编指令解析

X86架构 [原创]X86汇编之指令格式解析 [原创]汇编指令之OpCode快速入门 [原创]X64汇编之指令格式解析 ARM架构:

Android 图解逆向工程中ARM常用汇编指令(一)

我们走得太快,灵魂都跟不上了. 微小的幸福就在身边,容易满足就是天堂. 在逆向和爆破中我们经常会在IDA中接触到汇编,一般做安卓的不会太了解VB回编等,不太了解的同学可以先查看上篇文章<Android ARM常用的汇编指令合集> 再来继续我们的学习,我们先来看张图. 这个view里面有 PUSH/LDR/SUB/MOVS/BLX/SUBS/BEQ/CMP ,这些差不多都是常见的,不过也不需要看得懂,理解这个指令即可,接下来我们就来分析下这些指令分别有什么作用吧. 先引入 概念性 东西,免得大家

Angular 2 模板语法与常用指令简介

一.模板语法简介 插值表达式 <div>Hello {{name}}</div> 等价于 <div [textContent]="interpolate(['Hello'], [name])"></div> 模板表达式 1.属性绑定 1.1输入属性的值为常量 <show-title title="Some Title"></show-title> 等价于 <show-title [titl

如何实现对ARM汇编指令的调试?

学习ARM汇编语言时,少不了对ARM汇编指令的调试.作为支持多语言的调试器,gdb自然是较好的选择.调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控.为了在x86平台上执行ARM指令,可以使用qemu模拟器执行ARM汇编指令,具体的调试方法,一起来看看吧. 一.准备ARM汇编程序 首先,我们构造一段简单的ARM汇编程序作为测试代码main.s. .globl _start _start: mov R0,#0 swi 0x00900001 以上汇编指