`

EAX、ECX、EDX、EBX寄存器的作用(转载)

 
阅读更多
EAX、ECX、EDX、EBX寄存器的作用

一般寄存器: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字节。



386部分寄存器:



状态和控制寄存器组除了EFLAGS、EIP ,还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3。

这几个寄存器中保存全局性和任务无关的机器状态。

CR0中包含了6个预定义标志,0位是保护允许位PE(Protedted Enable),用于启动保护模式,如果PE位置1,则保护模式启动,如果PE=0,则在实模式下运行。1位是监控协处理位MP(Moniter coprocessor),它与第3位一起决定:当TS=1时操作码WAIT是否产生一个“协处理器不能使用”的出错信号。第3位是任务转换位(Task Switch),当一个任务转换完成之后,自动将它置1。随着TS=1,就不能使用协处理器。CR0的第2位是模拟协处理器位 EM (Emulate coprocessor),如果EM=1,则不能使用协处理器,如果EM=0,则允许使用协处理器。第4位是微处理器的扩展类型位ET(Processor Extension Type),其内保存着处理器扩展类型的信息,如果ET=0,则标识系统使用的是287协处理器,如果 ET=1,则表示系统使用的是387浮点协处理器。CR0的第31位是分页允许位(Paging Enable),它表示芯片上的分页部件是否允许工作。

CR1是未定义的控制寄存器,供将来的处理器使用。

CR2是页故障线性地址寄存器,保存最后一次出现页故障的全32位线性地址。

CR3是页目录基址寄存器,保存页目录表的物理地址,页目录表总是放在以4K字节为单位的存储器边界上,因此,它的地址的低12位总为0,不起作用,即使写上内容,也不会被理会。

这几个寄存器是与分页机制密切相关的,因此,在进程管理及虚拟内存管理中会涉及到这几个寄存器,读者要记住CR0、CR2及CR3这三个寄存器的内容。


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

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

相关推荐

    揭秘数据解密的关键技术 CHM

     1.4.1 EAX、EBX、ECX和EDX寄存器  1.4.2 EAX、EBX、ECX和EDX寄存器的用途  1.5 变址寄存器  1.5.1 ESI和EDI寄存器  1.5.2 ESI和EDI寄存器的用途  1.6 指针寄存器  1.6.1 EBP和ESP寄存器  1.6.2 EBP...

    常用汇编语言教程.docx

    - **`mov [ecx], edx`**: 将 `edx` 寄存器的值写入 `ecx` 寄存器指向的内存地址。 #### 三、实战应用 **3.1 控制结构** 汇编语言支持多种控制结构,例如条件判断和循环。这些结构可以通过跳转指令实现,根据条件...

    获取CPU信息(VC+汇编)

    执行CPUID指令,eax、ebx、ecx、edx寄存器将被更新 pop ebx ; 恢复ebx寄存器 ``` 在VC++中,可以使用`__asm`关键字来插入内联汇编,例如: ```cpp #include ... void GetCPUInfo(unsigned int *pEAX, unsigned ...

    寄存器的作用.docx

    数据寄存器主要用来保存操作数和运算结果,包括EAX、EBX、ECX和EDX这四个32位寄存器。在16位系统中,它们可以拆分为16位(AX、BX、CX、DX)或8位(AH、AL、BH、BL、CH、CL、DH、DL)寄存器,提供灵活性。其中,AX和...

    80x86的程序可见寄存器组.doc

    * EAX:16 位寄存器,高 8 位为 AH,低 8 位为 AL * EBX:16 位寄存器,高 8 位为 BH,低 8 位为 BL * ECX:16 位寄存器,高 8 位为 CH,低 8 位为 CL * EDX:16 位寄存器,高 8 位为 DH,低 8 位为 DL * ESP:16 位...

    易语言之前提 必知的一些基础语言.pdf

    寄存器是一种高速存储区域,比如EAX、EBX、ECX、EDX等,它们比内存访问速度更快。此外,还有ESP、EBP、ESI、EDI等寄存器,以及用于指示下一条指令的EIP寄存器。 汇编语言的指令通常包含操作码和参数。例如,"sub ...

    汇编---32位寄存器

    32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX,对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。4个16位寄存器又可分割成8个独立的8位...

    汇编语言寄存器详解

    在32位CPU中,有四个32位的通用寄存器:EAX、EBX、ECX和EDX,它们是16位寄存器AX、BX、CX和DX的扩展版本。每个32位寄存器都可以被拆分为两个16位寄存器使用,比如EAX可以被拆分为AX(低16位)和AH(高16位)。当需要...

    VC获取CPU ID号

    cpuid // 执行CPUID指令,结果会存储在eax, ebx, ecx, edx寄存器中 mov [cpuidResult], eax // 存储eax寄存器中的值 mov [cpuidResult + 4], ebx // 存储ebx寄存器中的值 mov [cpuidResult + 8], ecx // 存储ecx...

    AT&T汇编语言格式

    - **32位寄存器**:包括`%eax`、`%ebx`、`%ecx`、`%edx`、`%edi`、`%esi`、`%ebp`和`%esp`。 - **16位寄存器**:这些是上述32位寄存器的低16位,例如`%ax`、`%bx`、`%cx`、`%dx`等。 - **8位寄存器**:每个16位...

    易语言取寄存器值

    在x86架构的CPU中,有多种类型的寄存器,如通用寄存器(如EAX, EBX, ECX, EDX)、标志寄存器(如EFLAGS)以及段寄存器(如CS, DS, ES, SS等)。这些寄存器在执行各种计算、转移和条件判断时起到关键作用。 取寄存器...

    win32汇编寄存器的详细说明

    例如,EAX、EBX、ECX和EDX这些通用寄存器可以用于存储操作数或临时结果;ESI和EDI用于字符串操作;ESP和EBP用于栈操作;而段寄存器如CS、DS、SS、ES、FS和GS则用于管理内存访问。 理解这些寄存器的功能和使用场景是...

    寄存器简介1

    ECX寄存器,作为"计数器",在循环和重复操作中发挥关键作用。例如,REPE或REPZ前缀指令(重复直到零)以及LOOP指令,都会使用ECX作为循环计数器。这使得ECX在处理批量数据和迭代操作时非常有效。 EDX寄存器,被称为...

    AT_T汇编语言格式

    - **32位通用寄存器**:%eax,%ebx,%ecx,%edx,%edi,%esi,%ebp,%esp。 - **16位通用寄存器**:%ax,%bx,%cx,%dx,%di,%si,%bp,%sp。 - **8位寄存器**:%ah,%al,%bh,%bl,%ch,%cl,%dh,%dl。 - **段...

    vc内联汇编示例代码

    x86架构有多个通用寄存器(如eax, ebx, ecx, edx等),它们在内联汇编中用于临时存储数据。例如,eax通常用于计算结果,ebx、ecx和edx有时作为循环计数器或函数参数。 5. **子程序调用**: 虽然内联汇编主要处理...

    易语言之前提 必知的一些基础语言.docx

    寄存器是内存的一种高速版本,如EAX、EBX、ECX、EDX等,它们比内存访问速度快得多。EIP寄存器则指示下一条待执行的指令。汇编指令通常包含操作码、参数1和参数2。例如,"sub ebx, eax" 表示将EBX寄存器的值减去EAX...

    8086cpu寄存器详解.doc

    - EBX:基址寄存器,常用于存储内存地址,尤其在指针操作中。 - ECX:计数寄存器,常用于循环控制和字符串操作中的计数。 - EDX:数据寄存器,参与乘除运算和一般数据存储。 2. **段寄存器**: - ES、CS、SS、...

    汇编求三个数的最小值

    例如,X86架构的CPU有多个通用寄存器(如EAX、EBX、ECX和EDX)可以用来暂存数值。在这个问题中,我们可能需要至少两个寄存器来存储三个数中的两个,还有一个寄存器或内存位置来存储当前找到的最小值。 2. **输入...

    【汇编】各种寄存器介绍.pdf

    在32位CPU中,有4个32位的数据寄存器,分别是EAX、EBX、ECX和EDX。每个数据寄存器都可以进一步分为低16位的AX、BX、CX和DX,而每个16位寄存器又可以分为8位的高位(H)和低位(L)寄存器(例如,AX可以分为AH和AL)...

    at&t 汇编语言 教程

    2. 寄存器:AT&T汇编语言使用一组特定的寄存器,如eax、ebx、ecx、edx、esi、edi、ebp和esp,它们各自有不同的用途,例如eax通常用于计算结果,ebx、ecx和edx常用于通用目的,esi和edi用于字符串处理,ebp作为堆栈帧...

Global site tag (gtag.js) - Google Analytics