一个懒人专用文章归档神器,如果你不能成为压路机的一部分,那么你就只能成为道路的一部分 Bala~bala~

汇编基础—寄存器的完整解释

汇编 懒人 2167℃ 0评论

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,数据段寄存器
ES—Extra 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不能作为基址和变址寄存器来存放存储单元的地址,
在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
(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方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

转载:http://blog.csdn.net/obuyiseng/article/details/48315485

转载请注明:懒人档案室 » 汇编基础—寄存器的完整解释

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址