这里写目录标题

  • mov 传送指令
    • mov ptr
  • lea 直接读取有效地址值
  • call 调用子程序
  • ret 函数返回
  • add 加法
  • sub 减法
  • mul 乘法
  • div 除法
  • inc 自增(increase)
  • dec 自减
  • jmp
  • cmp
  • jne
  • je
  • push
  • pop
  • pushad
  • popad
  • and 与
  • or 或
  • xor 异或

mov 传送指令

  • mov eax, ebx 把 ebx内容传送到eax中
  • mov eax, 1001H ,把 1001H 写入eax中

mov ptr

  • 格式:move 操作数1, 单位长度 ptr[地址值]
  • 把 中括号里面计算结果的值,作为内存地址,取出里面的值,然后存入操作数1
  • 例如:
mov eax , dword ptr[ebp - 1001H]
  • 格式: 单位长度 ptr[地址值] ,操作数2
  • 例如:
- mov dword ptr[ebp - 1001H]  ,eax
  • 作用: 取出 ptr 和 []中括号里面的地址对应的内存值.
  • mov eax , dword ptr[ebp - 1001H] ,把 ebp - 1001H地址里的内容,取出来, dword是双字节大小,存入eax,因为 []里面计算的是地址,如果不加dword单位大小,就不知道从[]地址中取多长的数据复制给eax

lea 直接读取有效地址值

  • lea eax ,[1001H]
  • lea作用是把 中括号里的值存入 寄存器里,是去掉括号后赋值给左边寄存器
  • 把[1001H]里面的地址赋值给eax,也就是把1001H赋值给eax,执行之后的结果,是 eax = 1001H
  • 等价于 mov eax , 1001H
  • 因为lea的[]中括号可以做运算,所以 lea eax, [ebp - 10h]可以先运算,再把结果赋值给eax.作用是直接运算地址,然后复制给eax.通常用作c++中指针变量赋值
  • 通常做给c++指针赋值的时候使用这个指令,例如:
 int a = 3;    // mov dword ptr[ebp-01h] , 3int *p = &a;  // lea eax,[ebp-01h] , 先把 abp,01h的地址复制给eax,这里之所以不能使用 mov eax ,ebp-p1h ,是因为mov的操作数2不能直接做运算,不能做运算,但是[]可以做运算//mov dword ptr[ebp - 18h],eax,再把eax赋值给指针p

call 调用子程序

例如 call 地址值 ,call语句执行以后,会先把eip(eip中存储着下一条cpu要执行执行的地址),把eip指向的地址压入栈中,因为call执行完以后eip就已经指向了call的下一句. 就是把call的下一句指令压入占中.这时候esp(栈指针) 会esp - 4,然后执行jmp跳转到 call 后面的地址.
然后程序就跳转到这个地址,执行子程序,子程序末尾会有ret 语句,是返回语句,返回以后会跳到之前call语句的下一句
例如:
006C4E01 call 0067D4E0
006C4E06 push esi
相当于 push 006C4E06
jmp 0067D4E0

call里面遇到ret

ret 函数返回

  • 跟jmp指令差不多,也是跳转,区别是ret跳转到函数执行完以后的指令.在函数调用结束的时候用这条指令返回,返回到之前call指令调用函数之后的指令
  • 函数返回值一般放在 eax中

add 加法

例如 add eax,10 ,相当于 eax = eax + 10.等价于 lea eax,[eax + 10] .注意不能等价于 mov eax ,eax +10 .因为 + 加法运算只能写在 [ ] 中括号里面,否则有语法错误.

sub 减法

跟add相反
sub eax,10 相当于 eax = eax - 10

mul 乘法

mul eax , ecx , 4 等于 eax = ecx * 4 .用于数组结构,每次ecx变化就走一个元素

div 除法

跟乘法相反
div eax,ecx, 4 相当于 eax = ecx / 4

inc 自增(increase)

例如inc eax ,相当于 eax++ ,等价于 lea eax , [eax + 1]

dec 自减

跟inc 相反 , dec eax 相当于eax–,等价于 lea eax , [eax - 1]

jmp

  • jmp 地址
  • 无条件跳转能到地址所在的机器指令

cmp

  • 比较指令,比较结果以后,后面会跟着一个跳转指令 jne ,je之类的进行跳转
  • cmp op1,op2,比较 op1和 op2是否相等,如果不相等 ,后面跟着的jne会跳转,不想等,就不跳转.

jne

  • jump not equal比较结果不相等才跳转, 执行jne之前需要先执行 cmp比较指令,比较之后的结果 影响jne的跳转结果.
    例如:
  • cmp eax,dword prt[ ebp - 10h] //比较 eax和 后面地址里面的值的结果
  • jne 01234567 //如果上面比较结果不相等, 就跳转能到01234567的地址

je

跟上面的jne相反,cmp比较结果相等才跳转

push

入栈,把数值或者寄存器压入栈.每次push都是放入栈顶.
例如 push eax 或者push 0

pop

出栈,跟push相反,把栈顶的值赋值给寄存器.然后把栈顶的数给取出.
例如 pop eax,就是把栈顶的数赋值给eax,然后栈顶的值删掉.
栈底在高地址,栈顶是低地址,push是 esp - 4 pop 是esp + 4

pushad

一般在call调用的头部使用pushad,把寄存器按顺序压入栈,用来保存全部寄存器

popad

一般在call调用的尾部使用popad,把寄存器按顺序出栈,用来还原之前保存的全部寄存器

and 与

都为1才为1 ,例如: and eax,eax ,相当于eax = 1

or 或

有一个1就为1,全为0才为0,例如 or eax,eax 相当于 eax = 0

xor 异或

相同为0,不同为1,按位比较

  • xor eax,ecx把eax和ecx按位异或赋值给eax
  • 一般用于清零和加密操作,例如 xor eax,eax ,等于给eax = 0

微软x64常用汇编指令总结相关推荐

  1. 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码...

    浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...

  2. RISC-V 常用汇编指令

    RISCV 常用汇编指令 相关寄存器 寄存器 ABI 名 用途 Saver x0 zero 读取时总为 0, 写入时不起任何效果 - x1 ra 存放函数返回地址 (return address) C ...

  3. Cortex-A7 常用汇编指令

    Cortex-A7 常用汇编指令 一.处理器内部数据传输指令 1.mov 将数据从一个寄存器拷贝到另外一个寄存器,或者将一个立即数传递到寄存器里面 MOV R0,R1 @将寄存器 R1 中的数据传递给 ...

  4. 常用汇编指令(七大类)

    常用汇编指令 汇编语言指令大致分为以下几类 一.传送类指令 二.算数运算类指令 三.位操作指令 四.串操作指令 五.控制转移类指令 六.处理器控制类指令 七.汇编指令伪指令 一.传送类指令 1.数据传 ...

  5. 逆向中常见寄存器及常用汇编指令

    寄存器 通用寄存器 (前八个) 32位 16位 作用 EAX(累加器) AX 作用于操作数和结果的数据 EBX(基址寄存器) BX DS段中的数据指针 ECX(计数器) CX 用于字符串和循环操作 E ...

  6. x64 ASM 常用汇编指令

    语法习惯 这里主要说AT&T风格的汇编语言风格.因为gdb看反汇编默认的风格就是AT&T风格的,Intel风格的这里就不做介绍. 立即数,$ 开头 寄存器,% 开头 取地址里面的值,偏 ...

  7. 常用汇编指令对标志位的影响

    加法指令 ADD (addition) 指令对标志位的影响:CF=1 最高有效位向高位有进位CF=0 最高有效位向高位无进位OF=1 两个同符号数相加(正数+正数 或 负数+负数),结果符号与其相反. ...

  8. Linux常用汇编指令

    一. 数据传输指令 1. 通用数据传输指令 mov 传送字或字节 ( movb 传送字节 movw 传送字 movl 传送双字 movq 传送四字 movabsq 传送绝对的四字 ) movsx 先符 ...

  9. Linux学习笔记---Cortex-A7 常用汇编指令

    MOV指令 MOV R0,R1         @将寄存器R1中的数据传递给R0 MOV R0,#0X12   @将立即数0X12传递给R0寄存器 MRS指令 MRS R0,CPSR     @将特殊 ...

最新文章

  1. 生信入门必须掌握的 30 个 Linux 命令
  2. 自动驾驶出租车竞争激烈,国内百度占得先机!
  3. 1.13 实例:用户修改密码
  4. JVM—GC垃圾收集器
  5. 解密HLS中的AES加密
  6. 2018/12/26
  7. 论破坏计算机信息系统罪,论破坏计算机信息系统罪
  8. mysql中有time吗_mysql中 datatime与timestamp的区别说明
  9. MyReport报表引擎2.7.4.0新功能
  10. 加深 | Matlab图像实验操作基础(矩阵,九宫格、噪声处理)
  11. 华为人均工资高达70万,但先看看华为员工的16项标准
  12. 如何用Visio画出总线(空心的箭头)
  13. 一台电脑绿色安装多个版本google Chorme方案
  14. 优思学院|什么是TPM管理?
  15. JS输入框统计文字数量,并过滤拼音时的统计
  16. 获取指定年、月的具体天数
  17. Flutter InkWell Ink组件
  18. python房价预测_python预测房价
  19. 自己用html + js 一百行代码做一个朗读器
  20. 功放IC音频芯片双声道D类3W ESOP-8封装

热门文章

  1. 登月者请注意:月球微生物潜在的惊人可能性
  2. 【干货人生篇】过早优化的陷阱!
  3. 数据结构python学生成绩排序_科学网—数据结构之排序一(python实现) - 郗强的博文...
  4. 07年NOIp模拟赛by Matrix67 比赛成绩公布
  5. GitHub账号注册与登录
  6. Docker Hub 最受欢迎的10大镜像
  7. 构建属于自己的vue-ui组件库
  8. 关于ssm框架的外文文献及译文_你的毕业论文外文参考文献到这来找
  9. 驾校计算机管理制度,驾校工作人员管理制度
  10. ios 解决有关火星坐标的问题