参考一:

一般寄存器:AX、BX、CX、DX
AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器

索引暂存器:SI、DI
SI:来源索引暂存器,DI:目的索引暂存器

堆叠、基底暂存器:SP、BP
SP:堆叠指标暂存器,BP:基底指标暂存器

EAX、ECX、EDX、EBX:為ax,bx,cx,dx的延伸,各為32位元
ESI、EDI、ESP、EBP:為si,di,sp,bp的延伸,32位元

eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。

比方说:add eax,-2 ; //可以认为是给变量eax加上-2这样的一个值。

这些32位寄存器有多种用途,但每一个都有“专长”,有各自的特别之处。

EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。

EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址。

ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。

EDX 则总是被用来放整数除法产生的余数。

ESI/EDI分别叫做"源/目标索引寄存器"(source/destination index),因为在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串.

EBP是"基址指针"(BASE POINTER), 它最经常被用作高级语言函数调用的"框架指针"(frame pointer). 在破解的时候,经常可以看见一个标准的函数起始代码:
  
  push ebp ;保存当前ebp
  mov ebp,esp ;EBP设为当前堆栈指针
  sub esp, xxx ;预留xxx字节给函数临时变量.
  …
  
  这样一来,EBP 构成了该函数的一个框架, 在EBP上方分别是原来的EBP, 返回地址和参数. EBP下方则是临时变量. 函数返回时作 mov esp,ebp/pop ebp/ret 即可.

ESP 专门用作堆栈指针,被形象地称为栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。在32位平台上,ESP每次减少4字节。

esp:寄存器存放当前线程的栈顶指针
ebp:寄存器存放当前线程的栈底指针

eip:寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。

参考二:
eax …edi esp ebp寄存器简介

首先介绍我们会经常看到的一些寄存器:
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI)
2个指针寄存器(ESP和EBP)

4个数据寄存器(EAX、EBX、ECX和EDX):
32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。

那么如何理解eax,ax,al(ah)之间的关系呢?
专业点可以这样解释:Eax是32位寄存器,ax是16位寄存器,al(ah)是八位寄存器。
那么eax存储的数据就是ax的两倍,ax是al(ah)的两倍。
Eax可以存储的数字是DWORD(双字)ax存储的是WORD(字)AL(AH)存储的是BYTE(字节),那么为什么又有AH和AL呢,我们可以这样理解,AX=AH+AL,AH存储的是AX的高8位数据,AL存储的是AX的低八位数据。H这里就是HIGH,L就是LOW.
假设eax是红色区域,那么eax现在就是64636261;
那么ax就是eax的低十六位,也就是6261;
Al是61;AH是62。

其他ebx,ecx,edx也有类似的bx,bl,bh等对应的寄存器,原理和上面相同。

在用途方面,他们有各自默认的用途:
Eax用来保存所有API函数的返回值。
寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;
寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用;
寄存器CX称为计数寄存器(Count Register)。在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;
寄存器DX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

由于存储的数据大小关系,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址, 32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。(什么是基址,什么是变址以后会说到)

2个变址和指针寄存器(ESI和EDI)
32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

2个重要的指针寄存器(ESP和EBP)

这两个指针寄存器都和“栈”这个神秘的东东有关,那么什么是栈呢?这俩指针寄存器又有何作用呢?

从计算机科学的角度看,栈是一种数据结构,是一种先进后出的数据表。栈的最常见操作有两种:Push(入栈)和Pop(出栈)。

我们可以把栈想象成一摞扑克牌:
PUSH:为栈增加一个元素的操作是push,相当于在这摞扑克牌最上面再放一张

POP:从栈中取出一个元素的操作叫做POP,相当于从这摞扑克牌取出最上面的一

张。

TOP:标识栈顶位置,并且是动态变化的。每做一次PUSH 操作,它都会自增1;

相反,每做一次POP 操作,它会自减1。栈顶元素相当于扑克牌最上面一张,只有

这张牌的花色是当前可以看到的。

BASE:标识栈底位置,它记录着扑克牌最下面一张的位置。BASE 用于防止栈空后

继续弹栈(牌发完时就不能再去揭牌了)。很明显,一般情况下,BASE 是不会变动

的。

用王爽《汇编语言》中的图说明一下push和pop操作
代码如下:
mov ax,0123H
push ax
mov bx,2266H
push bx
mov cx,1122H
pop ax
pop bx
pop cx

mov是传送数据的指令,mov ax,0123H表明把0123H这个值给ax
H代表0123是十六进制数
图中左边的10000H等数值表明内存地址
箭头指向栈顶位置

那么针对此例栈底就是1000FH
栈顶由于入栈和出栈操作在不断变化。

那么在这里栈底1000FH就是BP 栈顶(不断变化的箭头)就是SP
(BP和SP分别是16位下的寄存器,与ebp,esp类似)

内存的栈区实际上指的就是系统栈。系统栈由系统自动维护,它用于实现高级语言中函

数的调用。对于类似C 语言这样的高级语言,我们无需担心他们是如何操作的。一般说来,只有在使用汇编语言的时候,才需要和它直接打交道。

那么ESP和EBP指的分别是什么呢?

(1)ESP:栈指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的栈顶。
(2)EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部。

本次重点内容:了解几个常见的寄存器名字,记住eax一般用来保存函数的返回值,记住esp是栈顶指针寄存器,ebp是栈底指针寄存器。

EAX、ESP、EBP等寄存器的作用相关推荐

  1. eax,ebx,ecx,edx,esi,edi,ebp,esp寄存器的作用

    eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86汇编语言中CPU上的通用寄存器的名称,是32位的寄存器.如果用C语言来解释,可以把这些寄存器当作变量看待. 比方 ...

  2. eax ...edi esp ebp寄存器简介(转)

    首先介绍我们会经常看到的一些寄存器: 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 4个数据寄存器(EAX.EBX.ECX ...

  3. X86系统中EAX、ECX、EDX、EBX寄存器的作用

    转自:https://www.cnblogs.com/qq78292959/archive/2012/07/20/2600865.html 一般寄存器:AX.BX.CX.DX AX:累积暂存器,BX: ...

  4. EAX、ECX、EDX、EBX等寄存器的作用

    EAX.ECX.EDX.EBX等寄存器的作用 ★ 一般寄存器:AX.BX.CX.DX AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器 ★ 索引暂存器:SI.DI SI:来源索引 ...

  5. EAX、ECX、EDX、EBX寄存器的作用

    一般寄存器:AX.BX.CX.DX AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器 索引暂存器:SI.DI SI:来源索引暂存器,DI:目的索引暂存器 堆叠.基底暂存器:SP. ...

  6. 汇编-栈帧-寄存器esp, ebp

    转载 原文地址 栈帧%ebp,%esp详解 分类专栏: 汇编 首先应该明白,栈是从高地址向低地址延伸的.每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息.寄存器ebp指向 ...

  7. 系统调用号(eax 调用号) 及 EAX、ECX、EDX、EBX寄存器的作用

    EAX.ECX.EDX.EBX寄存器的作用 https://www.cnblogs.com/qq78292959/archive/2012/07/20/2600865.html Linux系统调用号 ...

  8. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  9. CPU各寄存器的作用

    CPU各寄存器的作用 - [Asm] 寄存器作用:ebp和esp是32位的SP,BP esp是堆栈指针 ebp是基址指针 ESP与SP的关系就象AX与AL,AH的关系.32位CPU所含有的寄存器有:4 ...

最新文章

  1. Spring Boot + Mybatis 多模块(module)项目的完整搭建教程
  2. linux 驱动程序 HelloWorld
  3. VS中怎样打开MSDN帮助文档
  4. Kafka发送超过broker限定大小的消息时Client和Broker端各自会有什么异常?
  5. git的常用操作(个人整理使用)
  6. [Android] Implementation vs API dependency
  7. 浅析DDD(领域驱动设计)
  8. java日志级别的作用_Java系统日志级别对性能的影响性
  9. OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
  10. 以后台服务的形式启动nodejs应用
  11. 数据-第19课-递归的应用实战一
  12. 普林斯顿微积分读本篇十七:数列和级数,泰勒定理
  13. pg数据库客户端linux,PostgresSQL客户端pgAdmin4使用
  14. 【教程】 如何在linux/mac下安装pascal
  15. c语言傅立叶变换,傅立叶变换与傅立叶反变换的C语言实现
  16. ionic3 disabled
  17. 服务端接入验证苹果支付receipt
  18. php implode explode,php implode()函数与explode()函数的用法区别
  19. SQLCE数据工具(Flyhoward Ltd SDF Viewer)
  20. Selenium的使用

热门文章

  1. 第四讲:统计分析之良率和敏感度分析
  2. Lazada(来赞达):就三个步骤!搞定Lazada店铺装修
  3. LintCode 1144.范围加法之二
  4. 寒武纪加速平台(MLU200系列) 摸鱼指南(一)--- 基本概念及相关介绍
  5. Android黄油刀插件使用记录
  6. 英特尔 QSV 在 FFMPEG 中的使用(Linux)
  7. unity 使用LineRenderer实现飘带飞舞的效果
  8. 2012年信息系统项目管理师下半年上午考试习题与答案解析
  9. excel多列合并成一列加符号_Excel中如何将每行空格数据隔开为多列,以及如何合并多列数据为一列...
  10. OLED屏幕还未普及,移动VR没有想象中爆发那么快