x86常用汇编寄存器

时光怂恿深爱的人放手 提交于 2020-01-10 04:51:47

通用寄存器

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时,处理器单步执行指令,调试器可以逐条指令进行执行就是使用了该标志位。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!