首页 > 编程知识 正文

EAX寄存器,寄存器eax常用用途

时间:2023-05-05 13:08:18 阅读:177974 作者:2297

转自: https://www.cn blogs.com/QQ 78292959/archive/2012/07/20/2600865.html

一般寄存器: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 ),是重复前缀和循环指令的内定计数器。

EDX总是用于加入整数除法产生的馀数。

每个ESI/EDI都称为源/目标寄存器(源/目标索引)。 因为在许多字符串操作指令中,DS:ESI指向源字符串,而ES:EDI指向目标字符串。

EBP是“基址指针”(BASE POINTER ),最常用于高级语言函数调用的“帧指针”(frame pointer )。 在解密时,标准的函数开始代码:很常见

推式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外,还有CR0、CR1、CR2、CR3个32位控制寄存器。

这些寄存器存储与任务无关的全局机器状态。

CR0包括六个预定义标志,0个比特是保护许可比特PE(protedtedenable ),其被用于启动保护模式,如果PE位置1,则启动保护模式,并且如果PE=0,则以实模式运行。 1位是监视协调处理位MP(monitercoprocessor ),与第3位一起决定在TS=1时操作码WAIT是否发生“协调处理器不可用”的错误信号。 第三位是任务开关(Task Switch ),一个任务开关完成后自动设置为1。 TS=1时将无法使用协处理器。 CR0的第二位是伪协处理器位em(emulatecoprocessor ),如果EM=1,则不能使用协处理器,如果EM=0,则允许使用协处理器。 第四位是微处理器的扩展型位et(processorextensiontype ),存储有处理器扩展型的信息,如果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寄存器读取下一个指令的存储器地址并继续执行。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。