首页 > 编程知识 正文

8位的寄存器有哪些(凯迪拉克eboost模块)

时间:2023-05-05 13:12:28 阅读:74735 作者:2648

见上文第:段

一般寄存器: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分别称为源寄存器/目标寄存器(source/destination index )。 因为在许多字符串操作指令中,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个字节。

esp :在寄存器中存储当前线程的堆栈顶部指针

ebp :在寄存器中存储当前线程的堆栈底部指针

eip :寄存器保存下一个CPU指令保存的存储器地址,CPU执行当前指令后,从eip寄存器读出下一个指令的存储器地址继续执行。

参考2 :

eax …edi esp ebp寄存器介绍

首先,我将介绍我们经常看到的寄存器:

4个数据寄存器(EAX、EBX、ECX、EDX ) )。

两个索引和指针寄存器(ESI和EDI ) )。

两个指针寄存器(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 )是8位寄存器。

eax存储的数据是ax的两倍,ax是al(ah )的两倍。

可以存储在Eax中的数字是DWORD (双字) ax包含word (AL ) AH (字节),为什么存储AH和al呢? 可以理解为AX=AH AL,AH存储ax的前8位数据,AL存储ax的后8位数据。 这里是高电平,l是低电平。

假设eax是红色区域,则eax当前是64636261;

ax是eax的后16位,即6261

Al为61; AH是62。

其他ebx、ecx、edx中也有与同样的bx、bl、bh等对应的寄存器,原理与上述相同。

关于用途,分别有默认的用途。

Eax保存所有API函数的返回值。

寄存器AX和AL通常称为累加器,在累加器中执行操作可能需要更少的时间。 累加器可用于乘法、除法、输入输出等操作,它们使用频率高;

寄存器BX称为基地址寄存器(Base Register )。 它可以用作内存指针

寄存器CX称为计数寄存器(Count Register )。 循环和字符串操作用于控制循环的次数。 在位操作中,移位多个位时,用CL指定移位的位数。

将寄存器DX设置为数据寄存器(Da

ta 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 是不会变动

的。

用xhdhk《汇编语言》中的图说明一下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是栈底指针寄存器。

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