汇编寄存器详解

1、 16位寄存器组 
数据寄存器、变址寄存器统称为通用寄存器。 
在AX中,”x”表示的意思是mix,“混合”的意思。对AX指的是AH和AL两个混合的总称。 在EAX中,”E”表示的意思是Extended,“扩展”的意思。4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取

8086的寄存器为16位,有14个,可分为三部分: 

(1) 8个通用寄存器: 数据寄存器 AX—Accumulator Register,累加寄存器。算术运算的主要寄存器。 BX—Base Register,基址寄存器 CX—Count Register,计数寄存器,串操作、循环控制的计数器 DX—Data Register,数据寄存器 地址指针寄存器 SI—Source Index Register,源变址寄存器 DI—Destination Index Register,目的变址寄存器 SP—Stack Pointer Register,堆栈寄存器 BP—Base Pointer Register,基址指针寄存器

(2) 4个段寄存器: CS—Code Segment Register,代码段寄存器 DS—Data Segment Register,数据段寄存器 ES—Extra Segment Register,附加段寄存器 SS—Stack Segment Register,堆栈段寄存器 

(3) 2个控制寄存器: IP—Instruction Pointer,指令指针,即PC(Program counter),程序计数器 PSW—Processor State Word,微处理器状态字 其中PSW包括有9个标志位: CF—Carry Flag,进位标志 PF—Parity Flag,奇偶标志 AF—Auxiliary Carry Flag,辅助进位标志 ZF—Zero Flag,零标志 SF—Sign Flag,符号标志 TF—Trap Flag,陷阱标志 IF—Interrupt Enable Flag,中断允许标志 DF—Direction Flag,方向标志 OF—Overflow Flag,溢出标志

2、 32位寄存器组 
32位CPU的寄存器是32位的,并且32位的寄存器组增加了一些新的寄存器。对32位的通用寄存器EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP的低16位数据进行存取不影响高16位,所以,这些通用寄存器的低16位依旧用16位的AX、BX、CX、DX、SI、DI、SP、BP寄存器来表示。

32位的EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP与8086中的16位的AX、BX、CX、DX、SI、DI、SP、BP功能相似。 
32位CPU所含有的寄存器有: 
(1) 8个通用寄存器: 
数据寄存器 
EAX—Extended Accumulator Register,扩展的累加寄存器 
EBX—Extended Base Segment Register,扩展的基址寄存器 
ECX—Extended Count Segment Register,扩展的计数寄存器 
EDX—Extended Data Segment Register,扩展的数据寄存器

地址指针寄存器 
ESI—Extended Source Index Register,扩展的源变址寄存器 
EDI—Extended Destination Index Register,扩展的目的变址寄存器 
ESP—Extended Stack Pointer Register,扩展的堆栈寄存器 
EBP—Extended Base Pointer Register,扩展的基址指针寄存器 
(2) 6个段寄存器: 
CS—Code Segment Register,代码段寄存器 
DS—Data Segment Register,数据段寄存器 
SS—Stack Segment Register,堆栈段寄存器 
FS—Flag Segment Register,标志段寄存器 
FS寄存器指向当前活动线程的TEB结构(线程结构)。 
FS:[0]的地址指向的是TEB结构,这个结构的开头是一个NT_TIB结构,NT_TIB结构的0x18偏移处是一个Self指针,指向这个结构自身,也就是指向TEB结构的开头。 
GS—Global Segment Register,全局段寄存器

(3) 2个控制寄存器: 
EIP—Extended Instruction Pointer,扩展的指令指针,即PC(Program counter),程序计数器。 
PSW—Processor State Word,微处理器状态字 
其中PSW包括有9+4个标志位: 
CF—Carry Flag,进位标志 
PF—Parity Flag,奇偶标志 
AF—Auxiliary Carry Flag,辅助进位标志 
ZF—Zero Flag,零标志 
SF—Sign Flag,符号标志 TF—Trap Flag, 
陷阱标志 IF—Interrupt Enable Flag, 
中断允许标志 DF—Direction Flag, 
方向标志 OF—Overflow Flag, 
溢出标志 IOPL—I/O Privilege Level, 
I/O特权标志 NT—Nested Task, 
嵌套任务标志 RF—Restart Flag,重启动标志 
VM—Virtual 8086 Mode,虚拟8086方式标志

3、注释 
(1)、数据寄存器 
数据寄存器可分为8位的寄存器,作为通用寄存器,可存储算术逻辑运算的操作数和运算结果。 
AX,Accumulator,通累加器,用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高; 
BX,Base,基址寄存器,虽然属于数据寄存器,但它经常用作地址寄存器。 
CX,Count,计数寄存器,经常用作一个循环的计数,在循环语句中,默认CX的内容为循环次数。在位操作中,当移多位时,要用CX的低8位CL来指明移位的位数。 
DX,Data,数据寄存器,在进行乘、除运算时,它可作为默认的操作数参与运算,但在I/O指令中,DX用于表示I/O的端口地址。 
在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,

(2)、地址指针寄存器 
地址指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 
SI,Source,源地址寄存器,在字符串操作指令中,提供源操作数的段内偏移地址,在其他指令中,可用作地址寄存器。 
DI,Destination,目标地址寄存器,在字符串操作指令中,提供目的操作数的段内偏移地址,在其他指令中,可用作地址寄存器。

BP,Base,基址指针寄存器,可以指定段内偏移地址,将BP用作地址寄存器时,其默认的段地址为SS。

SP,Stack,堆栈指针寄存器,用于保存堆栈段的段内偏移地址,段地址由SS提供。

(3)、段寄存器 
段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。 
CPU内部的段寄存器: 
CS,Code,代码段寄存器,用于存放当前执行程序的段地址,IP为指令指针。 
DS,Data,数据段寄存器,用于存放当前数据段的段地址。 
ES,Extra,附加段寄存器,用于存放当前附加数据段的段地址 
SS,Stack,堆栈段寄存器,用于存放当前堆栈段的段地址。 
FS,Flag,标志段寄存器,FS寄存器指向当前活动线程的TEB结构(线程结构)。FS:[0]的地址指向的是TEB结构,这个结构的开头是一个NT_TIB结构,NT_TIB结构的0x18偏移处是一个Self指针,指向这个结构自身,也就是指向TEB结构的开头。 
GS,Global,全局段寄存器。 
32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简单描述如下: 
实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑 
地址仍为“段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。 
保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值。。

(4)、控制寄存器 
32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。 IP,Instruction,指令指针寄存器,用于保存下一条即将要执行的指令的段内偏移地址。一般要通过转移指令、子程序调用、返回指令等才能改变IP的值。 PSW,Processor State Word,微处理器状态字,其中DF、IF、TF标志用于控制CPU操作,其他ZF、SF、AF、PF、CF、OF反映ALU前一次操作的结果状态。 
反映ALU前一次操作的结果状态的标志位: CF,Carry,进位标志,加减运算时,最高位有进(借)位时,CF=1 PF,Parity,奇偶标志,操作结果的低8位中含有“1”的个数为偶数个时,PF=1 AF,Auxiliary Carry,辅助进位标志,加减运算时,D3位有进(借)位时,AF=1 ZF,Zero,零标志,运算结果为0时,ZF=1 SF,Sign,符号标志,操作结果的符号,结果为负,SF=1 OF,Overflow,溢出标志,有符号数运算时是否溢出的标志,溢出,则OF=1 
控制CPU的标志位: DF,Direction,方向标志,字符串操作中,DF=0时,地址寄存器(SI,DI)的内容递增;DF=1时,(SI,DI)的内容递减。

IF,Interrupt Enable,中断允许标志,IF=1时,CPU能够响应可屏蔽中断请求;IF=0时,则CPU不能响应中断请求。 TF,Trap,陷阱标志,TF=1时,则CPU处于单步执行方式,即每执行一条指令就自动执行一次类型1的内部中断,这主要用于Debug中。 
32位标志寄存器增加的标志位:

IOPL,I/O Privilege Level,I/O特权标志,I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。 
如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。 
NT,Nested Task,嵌套任务标志,嵌套任务标志NT用来控制中断返回指令IRET的执行。NT=0,用堆栈中保存的值恢复EFLAGS、CS和EIP,执行常规的中断返回操作;NT=1,通过任务转换实现中断返回。 
RF,Restart Flag,重启动标志,重启动标志RF用来控制是否接受调试故障。RF=0时,表示“接受”调试故障,否则拒绝之。 
在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。 
VM,Virtual 8086 Mode,虚拟8086方式标志,VM=1,表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

4、 32位地址的寻址方式

最后说一下32位地址的寻址方式。在前面我们学习了16位地址的寻址方式,一共有5种,在32位微机系统

中,又提供了一种更灵活、方便但也更复杂的内存寻址方式,从而使内存地址的寻址范围得到了进一步扩大。

在用16位寄存器来访问存储单元时,只能使用基地址寄存器(BX和BP)和变址寄存器(SI和DI)来作为

偏移地址的一部分,但在用32位寄存器寻址时,不存在上述限制,所有32位寄存器(EAX、EBX、ECX、

EDX、ESI、EDI、EBP、和ESP)都可以是偏移地址的一个组成部分。

当用32位地址偏移量进行寻址时,偏移地址可分为3部分:

1. 一个32位基址寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP)。

2. 一个可乘以1、2、4、8的32位变址寄存器(EAX、EBX、ECX、EDX、ESI、EDI和EBP)。

3. 一个8位~32位的偏移常量。

比如,指令:mov ebx, [eax+edx*2+300]

Eax就是基址寄存器,edx就是变址寄存器,300H就是偏移常量。

上面那3部分可进行任意组合,省去其中之一或之二。

下面列举几个32位地址寻址指令:

Mov ax, [123456]

Mov eax, [ebx]

Mov ebx, [ecx*2]

Mov ebx, [eax+100]

Mov ebx, [eax*4+200]

Mov ebx, [eax+edx*2]

Mov ebx, [eax+edx*4+300]

Mov ax, [esp]

由于32位寻址方式能使用所有的通用寄存器,所以,和该有效地址相组合的段寄存器也就有新的规定,具体

规定如下:

1. 地址中寄存器的书写顺序决定该寄存器是基址寄存器还是变址寄存器。

如:[ebx+ebp]中的ebx是基址寄存器,ebp是变址寄存器,而[ebp+ebx]中的ebp是基址寄存器,ebx是变

址寄存器,可以看出,左边那个是基址寄存器,另一个是变址寄存器。

2. 默认段寄存器的选用取决于基址寄存器。

3. 基址寄存器是ebp或esp时,默认的段寄存器是SS,否则,默认的段寄存器是DS。

4. 在指令中,如果显式地给出段寄存器,那么显式段寄存器优先。

下面列举几个32位地址寻址指令及其内存操作数的段寄存器。

指令列举:          访问内存单元所用的段寄存器

mov ax, [123456]    ;默认段寄存器为DS。

mov ax, [ebx+ebp]    ;默认段寄存器为DS。

mov ebx, [ebp+ebx]    ;默认段寄存器为SS。

mov ebx, [eax+100]    ;默认段寄存器为DS。

mov edx, ES:[eax*4+200]    ;显式段寄存器为ES。

mov [esp+edx*2], ax    ;默认段寄存器为SS。

mov ebx, GS:[eax+edx*8+300]    ;显式段寄存器为GS。

mov ax, [esp]    ;默认段寄存器为SS。



  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值