几种基本汇编指令详解

原创 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) 举报

相关文章推荐

extern "C

简介   extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。 含义   (1) 被ext...

‘runtime_error’在此作用域中尚未声明

在linux上使用的是g++编译器,头文件要这么写(还是不太熟悉g++啊): #include #include #include #include //这个头文件必须引入 using namesp...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

调用线程必须为 STA,因为许多 UI 组件都需要

class Mainclass { [STAThread] static void Main() { Applicati...

(一)计算机网络课程设计教学大纲

计算机网络课程设计教学大纲 任务一: 了解常用的网络命令的工作原理,掌握常用网络原理的使用 20分 Ping(http://baike.baidu.com/view/709.h...

班级学生查找问题

题目描述:一个班级有n个同学,需要把每个同学简单材料(姓名,学号)输入到计算机保存。然后输入某一个学生姓名查找相关资料   代码实现: #include using namespace std...

[11-22]MASM32编程获取文件语言、版本信息v3

;; FileName: VerInfo3.asm;  Function: Demo the way to get files version information a...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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