几种基本汇编指令详解

原创 2015年07月07日 11:02:09

几种基本汇编指令详解

常见寄存器

寄存器 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

  • 立即数寻址:

    movl $0x123, %edx

    数字->寄存器

  • 直接寻址:

    movl 0x123, %edx

    直接访问内存地址数据,edx = *(int32_t *)0x123;

  • 间接寻址:

    movl (%ebx), %edx

    %ebx 是个内存地址,(%ebx)指的是该地址中的数据,edx = *(int32_t*)ebx;

  • 变址寻址:

    movl 4(%ebx), %edx

    edx = *(int32_t*)(ebx+4);

push & pull

堆栈数据结构简介

作用:

  • 程序调用框架
  • 传递参数
  • 保存返回地址
  • 提供局部变量
  • ……

结构:

image

  • 相关寄存器: esp, ebp

  • 相关操作: pop, push

    //建立被调用者函数的堆栈框架
    pushl %ebp
    movl %esp, %ebp
    
    //拆除框架
    movl %ebp, %esp
    popl %ebp
    ret
    

push:压栈

  • push %eax

    相当于:

    subl $4, %esp
    //栈顶指针减4
    movl %eax, (%esp)
    //%eax -> esp 地址
    

pop:出栈

  • pop %eax

    相当于:

    movl (%esp), %eax
    addl %4, %esp
    //栈顶指针加4
    

call&ret

call

  • call 0x12345

    相当于:

    pushl %eip
    movl $0x12345, %eip
    //当前地址压栈,存入新地址
    

ret

  • 相当于:

    popl %eip
    //栈 -> eip
    

enter&leave

enter

    push %ebp
    movl %esp, %ebp
    //将堆栈置空(栈上重堆)

leave

    movl %ebp, %esp
    popl %ebp
    //将堆栈置空(撤销堆栈)

例子:分析一段汇编代码

    pushl $8   ①
    movl %esp, %ebp     ②
    subl $4, %esp  ③
    movl $8, (%esp)        ④

image

image

image

image

image

版权声明:本文为博主原创文章,未经博主允许不得转载。(文章来源:http://blog.luoyuanhang.com)

相关文章推荐

常用汇编指令

1、     MOV(传送) 指令写法:MOV  target,source 功能描述:将源操作数source的值复制到target中去,source值不变 注意事项:1)targe...
  • nopoppy
  • nopoppy
  • 2016年11月16日 22:19
  • 934

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

常用汇编指令

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

汇编语言基本指令

一.机械码,又称机器码. ultraedit打开,编辑exe文件时你会看到 许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码 就是机器码. 修改程...

x86汇编指令详解

 80x86指令系统   80x86指令系统,指令按功能可分为以下七个部分。   (1) 数据传送指令。   (2) 算术运算指令。  ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Arduino 代码机制

接下来就可以激动的开始写代码了,一定想测试测试自己的成果。可是打开Arduino就郁闷了,因为只看到了setup和loop函数,却没有基本的c函数。 void setup() { // put y...

64位和32位的寄存器和汇编的比较

64位寄存器分配的不同 区别有: 64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _。e开头的寄存器命名依然可以直接运...

QQ项目四之注册界面

/// /// 第一步:登陆验证方法;7章178页,参考;过滤不正确的数据. /// /// /// publi...

QQ项目之五查找和添加好友

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:几种基本汇编指令详解
举报原因:
原因补充:

(最多只允许输入30个字)