几种基本汇编指令详解

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

x86汇编指令详解

 80x86指令系统   80x86指令系统,指令按功能可分为以下七个部分。   (1) 数据传送指令。   (2) 算术运算指令。  ...
  • bekilledlzy
  • bekilledlzy
  • 2007年08月30日 18:26
  • 124080

汇编指令解释大全

汇编语言指令详讲(2011-05-13 17:31:32) 标签: it 分类: 汇编-C-C-java-VB编程   AAA   ...
  • liuy88141
  • liuy88141
  • 2015年06月06日 20:19
  • 6953

x86汇编指令详解

转自:http://blog.csdn.net/bekilledlzy/article/details/1765802 80x86指令系统   80x86指令系统,指令按功能可分为以下...
  • deng_sai
  • deng_sai
  • 2015年12月01日 16:07
  • 8446

x86汇编指令详解

80x86指令系统   80x86指令系统,指令按功能可分为以下七个部分。   (1) 数据传送指令。   (2) 算术运算指令。   (3) 逻辑运算指令。   (4) 串操作指令。 ...
  • ywb201314
  • ywb201314
  • 2016年11月15日 16:36
  • 682

几个常用(伪)汇编指令详解

 SDRAM例程: 从Nand Flash启动CPU时,CPU会自动将Nand Flash开始的4K数据复制到4KB的内部Ram中(起始地址0),然后地址0开始执行。 本例程先用汇编设置好S...
  • cr2066
  • cr2066
  • 2016年07月19日 21:33
  • 1068

汇编指令详解.pdf

  • 2009年11月18日 11:26
  • 727KB
  • 下载

ARMV7 NEON汇编指令详解中文版

  • 2012年11月01日 16:26
  • 5.66MB
  • 下载

汇编指令详解大全

  • 2015年02月28日 19:40
  • 3.43MB
  • 下载

汇编语言指令大全(详解版)

  • 2013年03月01日 20:22
  • 3.28MB
  • 下载

汇编指令解读

16位数据操作指令 名字 功能 ADC 带进位加法(ADD with Carry) ADD 加法 AND 按位与。这里的按位与和C的”&”功能相同 ASR 算术右...
  • peeno
  • peeno
  • 2016年11月07日 17:47
  • 2230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:几种基本汇编指令详解
举报原因:
原因补充:

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