通用寄存器
32位 | 16位 | 高8位 | 低8位 |
---|---|---|---|
EAX | AX | AH | AL |
EBX | BX | BH | BL |
ECX | CX | CH | CL |
EDX | DX | DH | DL |
ESI | SI | ||
EDI | DI | ||
ESP | SP | ||
EBP | BP |
E:Extend,X:逻辑与算数
- EAX(Extend Add):累加器,在乘法和除法指令中自动使用;Win32中,一般用在函数的返回值中。
- EBX(Extend Base):基地址寄存器,DS(数据段)中的数据指针。
- ECX(Extend Count):计数器,CPU自动使用ECX作为循环计数器,在自妇产和循环操作中常用,在循环指令(LOOP)或串操-作中,ECX用来进行循环计数,每执行一次循环,ECX都会被CPU自动减一。
- EDX(Extend Data):数据寄存器。
以上的寄存器常用来保存各种需要计算的值。 - EBP(Extend Base Pointer):基地址指针寄存器,SS(堆栈段)中数据指针。EZBP有高级语言用来引用参数和局部变量,通常称为堆栈基地址寄存器。
- ESP(Extend Stack Pointer):堆栈指针寄存器,SS(堆栈段)中堆栈指针,ESP用来寻址堆栈上的数据,ESP寄存器一般不参与算数运算,通常称为堆栈指针寄存器。
- ESI(Extend Source Improve):源变址寄存器,字符串操作源指针。
- EDI (Extend Destination Improve):目的变址寄存器,字符串操作目标指针。
以上寄存器在物理硬件层表示为半导体,半导体容纳01数值最大长宽度32位,也可以表示为一个低16位,或者两个8位寄存器(高和低)以此兼容不同宽度位数据(从8位到32位为计算机发展中扩展顺序,这是历史原因)。
指令指针寄存器
32位 | 16位 |
---|---|
EIP | IP |
- 指令指针寄存器EIP是32位的 IP为16位,这是上层的表示方式,为了兼容不同宽度的指令级,比如16位内核(16位操作系统),主做CPU指令寻址。
- 每次EIP或者IP被CPU调用,自动指向下一条指令(引用指令的基地址和指令宽度)。
- EIP或者IP的值在程序中是不允许人为直接修改。只能通过影响EIP的指令间接修改(JMP,JE,LOOP,CALL等指令)
- EIP或者IP始终引导CPU的执行
段寄存器
32位CPU | 16位CPU |
---|---|
CS | CS |
DS | DS |
ES | ES |
SS | SS |
FS | |
GS |
- CS (Code Segment) 代码段
- DS (Data Segment) 数据段
- ES (Extra Segment) 附加段
- SS (Stack Segment) 堆栈段
- FS (Fream Segment) 附加段,指向重要的操作系统数据结构,如 SHE:Structured Exception Handling、TEB:Thread Execute Block、PEB:Process Execute Block
- GS()附加段,GS寄存器用于指向操作系统定义的结构。 FS并且GS通常被OS内核用于访问线程专用的内存。在Windows中,该GS寄存器用于管理线程特定的内存。linux内核用于GS访问cpu特定的内存。
FS和GS 详细回答(Stack Overflow)
标志寄存器
在16位的CPU中,标志寄存器称为 FLAGS 或者 PSW(Program Status Word)
在32位的CPU中,标志寄存器被扩展成32位,称为EFLAGS。
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||||||
溢出 | 方向 | 中断 | 陷阱 | 符号 | 零 | 辅助进位 | 奇偶 | 进位 |
上面只介绍了16位标志寄存器。16位CPU中的标志位在32位CPU中依然可以使用,32位CPU扩展了4个新的标志位。
条件标识寄存器
- OF(OverFlow Flag) 溢出标志位,用来反映有符号数的加减运算所得的结果是否溢出(其实只存在加法运算器),超过表示溢出为1 否则为0。
- SF(Sign Flag) 符号标志位,反映运算结果的正负,负为1,正为0。
- ZF(Zero Flag) 零标志位,用来反映运算结果是否为0,为0置位为1,否则为0。
- AF(Auxiliary Flag) 辅助进位标志位,在字操作时,发生低字节向高字节进位或者借位时被置为1,否则为0。(注意:在字节操作时,发生低4位向高4位进位或者借位时该标志位置为1,否则为0)。
- PF(Parity Flag) 奇偶校验标志位:用于反映结果中“1”的个数的奇偶性。如果“1”的个数为偶数,该标志位为1,否则为0。
- CF(Carry Flag) 进位标志位,运算结果的最高位位产生了一个个进位或错位,该标志位被置为1,否则为0。
控制标志寄存器
- DF(Direction Flag) 方向标志位,用于串操作指令中,控制地址的变化方向。当DF为0时,存储器地址自动增加;当DF为1时,存储器自动减少。操作DF标志寄存器可以使用 CLD和STD进行复位和置位。
- IF(Interrupt Flag) 中断标志位,用于控制外部可屏蔽中断是否可以被处理器响应。当IF为1时,允许中断;当IF为0时,则不允许中断。操作IF标志寄存器可以使用CLI和STI进行复位和置位。
- TF(Trap Flag) 陷阱标志位,用于控制处理器是否进入单步的操作方式。当TF为0时,处理器在正常模式下运行;当TF为1时,处理器单步执行指令,调试器可以逐条指令进行执行就是使用了该标志位。
来源:CSDN
作者:FunNing_C
链接:https://blog.csdn.net/qq_24423085/article/details/103835522