一些汇编指令寄存器杂谈
汇编指令寄存器
登记学习记录
· 8086寄存器分类:
· 1.通用寄存器(8个):AX、BX、CX、DX和SI、DI、SP、BP
· 2.指令指针(1):IP
· 3. 标志寄存器(1):FR
· 4.段寄存器等(4):ES、CS、SS、DS
寄存器详解(DX:数据寄存器)
七种寻址方式(立即寻址、寄存器寻址)
8086寄存器分类:
8086有14个16位寄存器。 这14个寄存器可以分为:
1、通用寄存器(8个):AX、BX、CX、DX和SI、DI、SP、BP
2.指令指针(1):IP
3. 标志寄存器(1):FR
4.
5、段寄存器等(4):ES、CS、SS、DS
386还有4个32位控制寄存器,分别是CR0、CR1、CR2和CR3。 【稍后学习连接时添加】
1、通用寄存器(8个):AX、BX、CX、DX和SI、DI、SP、BP
汇编eax寄存器与AX、AH、AL的关系
那么如何理解eax、ax、al(ah)之间的关系
专业点可以这样解释:eax是32位寄存器,ax是16位寄存器,al(ah)是8位寄存器。
那么eax中存储的数据是ax的两倍,ax是al(ah)的两倍。
Eax可以存储的数字是DWORD(双字)。 axe存储的是WORD(单词)。 AL(AH) 存储 BYTE(字节)。 那么为什么会有AH和AL呢? 我们可以这样理解,AX=AH+ AL,AH存储AX的高8位数据,AL存储AX的低8位数据。 这里的 H 为高,L 为低。
· 数据寄存器(4)
o AH&AL=AX():累加寄存器,常用于运算; 它被指定用于存储乘法和除法等指令中的操作数。 此外,所有 I/O 指令都使用该寄存器将数据传输到外部设备。 EAX:通用寄存器。 与其他寄存器相比,它更常用于执行操作。 在保护模式下,还可以用作内存偏移指针(此时DS充当段寄存器或选择器)
o BH&BL=BX(base):基地址寄存器,常用于地址索引。 EBX:通用寄存器。 通常用作内存偏移指针(相对于EAX、ECX、EDX),DS是默认的段寄存器或选择器。 在保护模式下,也可以起到这个作用。
o CH&CL=CX(count):计数寄存器,常用于计数; 通常用于保存计算值,例如用作移位指令、循环和字符串处理指令中的隐式计数器。 ECX:通用寄存器。 通常用于计算特定指令。 在保护模式下,它还可以用作内存偏移指针(在这种情况下,DS充当寄存器或段选择器)。
o DH&DL=DX(data):数据寄存器,常用于数据传输。 EDX:通用寄存器。 在某些运算(如乘法和除法)中用作EAX的溢出寄存器。
· 指针寄存器和变址寄存器(4)
o SI(Index):源索引寄存器,可用于存储相对于DS段的源索引指针。 ESI:通常用作内存操作指令中的“源地址指针”。 当然,ESI可以加载任何值,但通常没有人将其用作通用寄存器。 DS 是默认的段寄存器或选择器。
o DI(Index):目标索引寄存器,可用于存储相对于ES段的目标索引指针。 EDI:通常用作内存操作指令中的“目的地址指针”。 当然,EDI也可以加载任何值,但通常没有人将其用作通用寄存器。 ES 是默认的段寄存器或选择器。
o SP(Stack):堆栈指针,与SS配合使用,可以指向当前堆栈位置
o BP(Base):基址指针寄存器,可作为SS的相对基地址位置
EBP 和 ESP:用作指针的寄存器。 它们也可以用作 16 位寄存器 BP 和 SP。 它们通常用于锥体堆叠操作。 通常,高级语言编译器使用它来构建“堆栈帧”来保存函数或过程的局部变量,但同样,您可以在其中保存您想要的任何数据。 SS 是其默认的段寄存器或选择器。
2.指令指针(1):IP
指令指针IP是一个16位的特殊寄存器,它指向当前需要取的指令字节。 当BIU从内存中取出一个指令字节时,IP会自动加(取出该字节的长度,如:BIU从内存中取出该字节的长度。如果取出1个字节,则IP会自动加1。如果BIU从内存中取出的字节数长度为3,IP会自动增加3)并指向下一个指令字节。
注意,IP指向指令地址的段内地址偏移量,也称为偏移地址( )或有效地址(EA, )。
3. 标志寄存器(1):FR
8086有一个16位标志寄存器FR。 FR中有9位有意义的位,其中6位是状态位,3位是控制位。 标志寄存器(Flags,FR)也称为程序状态字(Word,PSW)。
4、段寄存器等(4):ES、CS、SS、DS
段寄存器等(4):ES、CS、SS、DS
四个段寄存器,专门用来保存段地址:
· CS(Code):代码段寄存器
· DS(Data):数据段寄存器
· SS(Stack):堆栈段寄存器
· ES(额外):附加段寄存器。
寄存器和常用汇编指令
为了学习的目的,我最近查看了该程序集。 由于我是初学者,很多东西基本没接触过,所以我把基本的指令和寄存器记录下来,以便自己慢慢适应汇编,理解那些华丽花哨的反汇编代码。 。 学习这个东西的目的基本上是为了破解和逆向工程。 因为最近需要调试一个exe,所以顺便学习了汇编。
8 个常规 32 位寄存器:
地址
姓名
描述
EAX*
累加器
计算操作数并存储结果数据
EBX
基本寄存器
指向 DS 数据段的数据指针
ECX*
计数寄存器
字符串和循环操作的计数器
能谱分析*
数据寄存器
输入/输出指针
ESI
来源索引
字符串操作的源地址指针
电子数据交换
目的地索引
字符串操作的目的地址指针
ESP
堆栈指针
堆栈指针,不能直接使用
电子血压计
基指针
堆栈数据指针
6个16位段寄存器,定义内存中的段
地址
姓名
描述
CS
代码片段
指令存储和执行的地方
DS,
ES、FS、GS
数据段
数据段
SS
堆栈段
当前程序存储其堆栈的位置
2个32位寄存器(不属于上述任何类型)
地址
姓名
描述
代码片段
状态、控制和系统标志
电子工业园区
指令指针