(zz from http://blog.luoyuanhang.com/)

##常见寄存器

寄存器 16位 32位 64位
累加寄存器

accumulator
AX EAX RAX
基址寄存器

base
BX EBX RBX
计数寄存器

count
CX ECX RCX
数据寄存器

data
DX EDX RDX
堆栈基指针

Base Pointer 
BP EBP RBP
变址寄存器

Source Index
SI ESI RSI
堆栈顶指针

Stack Pointer
SP ESP RSP
指令寄存器

Instruction Pointer
IP EIP RIP
AH&AL=AX(accumulator):累加寄存器
BH&BL=BX(base):基址寄存器
CH&CL=CX(count):计数寄存器
DH&DL=DX(data):数据寄存器
SP(Stack Pointer):堆栈指针寄存器
BP(Base Pointer):基址指针寄存器
SI(Source Index):源变址寄存器
DI(Destination Index):目的变址寄存器
IP(Instruction Pointer):指令指针寄存器
CS(Code Segment)代码段寄存器
DS(Data Segment):数据段寄存器
SS(Stack Segment):堆栈段寄存器
ES(Extra Segment):附加段寄存器 

##汇编指令

##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 %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 %ebp, %esp ②
subl $4, %esp ③
movl $8, (%esp) ④

 
 

基础汇编指令(16bit 32bit 64bit)的更多相关文章

  1. java线程基础巩固---数据同步引入并结合jconsole,jstack以及汇编指令认识synchronized关键字

    对于多线程编程而言其实老生成谈的就是数据同步问题,接下来就会开始接触这块的东东,比较麻烦,但是也是非常重要,所以按部就班的一点点去专研它,下面开始. 数据同步引入: 这里用之前写过的银行叫号的功能做为 ...

  2. 汇编指令与Intrinsics指令的对应关系汇总

    汇编指令与Intrinsics指令的对应关系汇总 参考网址:https://software.intel.com/sites/landingpage/IntrinsicsGuide/ 1.赋值指令:m ...

  3. 常用ARM汇编指令

    常用ARM汇编指令 [日期:2012-07-14] 来源:Linux社区  作者:xuyuanfan77 [字体:大 中 小]     在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时初 ...

  4. ARM体系结构和汇编指令

    第一节 可编程器件的编程原理 1. 可编程器件的特点 1 . CPU在固定频率的时钟控制下节奏运行 2 . CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行 3 . 这些可以被CPU解 ...

  5. 常见寄存器以及常见汇编指令,常见爆破指令 good

    CPU的任务就是执行存放在存储器里的指令序列.为此,除要完成算术逻辑操作外,还需要担负CPU和存储器以及I/O之间的数据传送任务.早期的CPU芯片只包括运算器和控制器两大部分.到了近几年,为了使存储器 ...

  6. C表达式中的汇编指令

    C 表达式中的汇编指令 asm 为 gcc 中的关键字,asm 表达式为在 C代码中嵌套汇编指令,该表达式只是单纯的替换出汇编代码,并不对汇编代码的含义进行解析. asm 表达式有两种形式,第二种 a ...

  7. C 表达式中的汇编指令

    asm 为 gcc 中的关键字,asm 表达式为在 C代码中嵌套汇编指令,该表达式只是单纯的替换出汇编代码,并不对汇编代码的含义进行解析. asm 表达式有两种形式,第二种 asm-qualifier ...

  8. 汇编语言——用DOSBox的debug查看CPU和内存 & 用机器指令和汇编指令编程

    实验一 查看CPU和内存,用机器指令和汇编指令编程   实验目的 了解什么是Debug,以及Debug中需要用的一些功能 R:查看.改变CPU寄存器的内容 D:查看内存中的内容 E:改写内存中的内容 ...

  9. 结合Intel Manual和libdasm学习汇编指令

    参考:http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html h ...

随机推荐

  1. HTTP 请求头中的 Remote_Addr,X-Forwarded-For,X-Real-IP

    REMOTE_ADDR 表示发出请求的远程主机的 IP 地址,remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间 ...

  2. 关于JWTtoken的管理问题

    JWT简介: Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.因为网络上有很多关于jwt的详细介绍了,所以我这里就不再赘述.但是JWT的大 ...

  3. [解决]RESTEASY003215: could not find writer for content-type text/html type: java.lang.String

    一.问题描述 1)项目一开始采用JAX-RS 2.1+Jersey 2.26调用REST服务能正常调用并获得正确响应: 2)当项目引入dubbo 2.6.2后也用到rest而dubbo要用到RESTE ...

  4. 字节码操作JAVAssist

    字节码操作Javassist 字节码:字节码是设计被用来将代码高效的传送给多种软件平台.硬件平台,字节码的设计也实现了Java的平台无关性,字节码比机器码更抽象,它通常被认为是包含了一个可执行文件的二 ...

  5. python-day3集合、文件读写、函数

    @集合运算 s.union(t) s | t 返回一个新的 set 包含 s 和 t 中的每一个元素 s.intersection(t) s & t 返回一个新的 set 包含 s 和 t 中 ...

  6. python3 在文件确实存在的情况下,运行提示找不到文件

    提示 [Errno 2] No such file or directory: 但是路径下确实存在此文件,在不改动的情况下,再次运行,执行成功. 百思不得其解,看到此链接下的回答 http://bbs ...

  7. Linux 下安装 tomcat

    前提:已经安装配置好了 JDK 1.下载二进制文件 wget http://us.mirrors.quenda.co/apache/tomcat/tomcat-9/v9.0.19/bin/apache ...

  8. Vue相关文章

    1.新手向:Vue 2.0 的建议学习顺序 2.用webstorm搭建vue项目 3.vue-cli3.0项目结构

  9. gradle问题汇总

    问题:从SVN下载到本地后,gradle无法同步,报错如下:Failed to resolve: support-core-utilsFailed to resolve: support-media- ...

  10. [Linux] umask 从三类人群的权限中拿走权限数字

      作用   umask 用来设置用户创建文件.目录的默认权限,通过从权限中拿走相应的位,格式 `umask nnn`.     理解   rwx rwx rwx 权限对应三类人群,所属人,所属组,其 ...