寄存器概念整理

来源:互联网 发布:ios禁止软件联网 编辑:程序博客网 时间:2024/04/30 01:32

一直以来对寄存器的名称、作用比较模糊,今天抽时间整理了下。

 

(一)  通用寄存器

作用:传送和暂存数据,参与算数和逻辑运算。

(1)通用寄存器

16位的有8个:AX(Accumulator),BX(Base),CX(Count),DX(Data),BP(BasePointer),SP(Stack Pointer),SI(Source Index),DI(Destination Index)

对应的32位为:EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI

EAX,EBX,ECX,EDX为通用寄存器,其低16位为AX,BX,CX,DX,再进一步,每一个还能分成两个8位,如AX:AH-AL,BX:BH-BL等。他们除能作为普通数据寄存器使用外,他们还有特殊作用:

AX为累加器,进行乘除运算,字的输入输出,中间结果的缓存

BX基地址寄存器,除了作为通用寄存器,其主要功能是寻址,存放偏移地址,与段寄存器结合使用。

CX为计数器,控制循环次数以及CL存放移位的位数

DX为数据寄存器,在乘除运算时,可以作为默认操作数参与运算。

SI、DI为变址寄存器,存储单元在段内的偏移量,实现不同的寻址方式。SI存储器指针、串指令中的源操作数指针。DI存储器指针、串指令中的目的操作数指针。

BP、SP为指针寄存器,BP是基指针寄存器,当使用[BP]时,且没有显式给出段地址时,则默认使用SS段寄存器中的段地址。(BXSIDI默认使用DS段寄存器)SP是栈指针寄存器,存放了指向栈顶的指针。

(二)控制寄存器

(2)指令指针寄存器

                  IP(Instruction Pointer),32位为EIP,存放下次要执行的指令在代码段中的偏移量

(3)标志位寄存器

                  Flag,32位为EFlag, Flag寄存器中的数据是按位起作用的,Flag寄存器中存储的信息通常又被称为程序状态字(PSW)

位数

11

10

9

8

7

6

4

2

0

标志

OF

DF

IF

TF

SF

ZF

AF

PF

CF

全称

Overflow Flag

Direction Flag

Interrupt

-Enable Flag

Trap Flag

Sign Flag

Zero Flag

Auxiliary Carry Flag

Parity Flag

Carry Flag

意义

溢出标志

方向标志

中断允许标志

追踪标志

符号标志(结果是否为负数)

零标志位(结果是否为0)

辅助进位标志

奇偶标志(结果中1的个数)

进位标志

(参考内容:http://www.cnblogs.com/BoyXiao/archive/2010/11/20/1882716.html)

 

(三)段寄存器

                  根据内存分段的管理模式而设立段寄存器。16位CPU的段寄存器分别是:

                  CS:(Code Segment)               代码段寄存器

                  SS:(Stack Segment)堆栈段寄存器

                  DS:(DataSegment)数据段寄存器

                  ES:(Extra Segment)附加段寄存器,存放当前执行程序中一个辅助数据段的段地址

                  FS:附加段寄存器(标志段寄存器)

                  GS:附加段寄存器(全局段寄存器)

                  关于FS寄存器,当系统运行在ring3时,FS 值为指向的段是 GDT 中的 0x38 段,基地址为 当前线程 的线程环境块( TEB ),所以该段也被称为“TEB 段”。当系统运行在ring0时,FS 指向的段是 GDT 中的 0x30 段,该地址指向系统的处理器控制区域( KPCR )。这个区域中保存这处理器相关的一些重要数据值,如 GDT 、 IDT 表的值等等。

(参考博文http://blog.csdn.net/misterliwei/article/details/4391580

http://bbs.pediy.com/showthread.php?t=159935)

 

对于访问某个段的程序,必须将段选择符加载到一个段寄存器中,通过段选择符去定位段描述符表中的一个段描述符来指定一个段,段描述符中包含访问一个段的所有信息,包括段基址、段长度、段属性等。

(段选择符、段描述符参考:http://blog.csdn.net/lbo4031/article/details/6990376

http://blog.sina.com.cn/s/blog_9e16dc4d010150t1.html)

 

8086CPU中,只有BX,SI,DI,BP可以以[..]的方式使用

 

操作系统的外壳(Shell)程序,将可执行文件加载到内存中以后,就会设置CPU中个的两个寄存器,即CS:IP指向可执行文件的起始地址。

 

 


 

0 0