一些基本的汇编指令

常见的寄存器

寄存器16位32位64位
累加寄存器AXEAXRAX
基址寄存器BXEBXRBX
技术寄存器CXECXRCX
数据寄存器DXEDXRDX
堆栈寄存器BPEBPRBP
变址寄存器SIESIRSI
堆栈顶指针SPESPRSP
指令寄存器IPEIPRIP

汇编指令

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

作用
  • 程序调用框架
  • 传递参数
  • 保存返回地址
  • 提供局部变量
  • ......
结构
  • 相关寄存器

    esp, ebp

  • 相关操作

    pop, push

// 建立被调用者函数的堆栈框架
pushl %esp
movl %esp, %ebp
popl %ebp
ret
push压栈
  • pushl %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 // 将堆栈置空(撤销堆栈)

原文地址:集中基本汇编指令详解

转载于:https://my.oschina.net/u/3295680/blog/3054748

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值