AT&T汇编语言(寄存器分类)

IA-32平台下的主要寄存器有一下几类:

  • 通用寄存器
  • 段寄存器
  • 指令寄存器
  1. 通用寄存器是8个32为寄存器,用于存储正在处理的数据
  • EAX 用于操作数和结果的累加器
  • EBX 指向数据内存段中的数据的指针
  • ECX 字符串和循环操作的计数器
  • EDX IO指针
  • EDI 用于字符串操作的目标数据指针
  • ESI 用于字符串操作的源数据指针
  • ESP 堆栈指针
  • EBP 堆栈数据指针
    前4个通用寄存器可也可以通过16位或者8位名称引用,以表示寄存器的老版本。例如:EAX 的低 16 位成为 AXAX 的高 8 位称为AH ,低 8 位称为 AL
  1. 段寄存器, 6个16位寄存器,用于处理内存访问。
  • CS 代码段(code segment)
  • DS 数据段(data segment)
  • SS 堆栈段(stack segment)
  • ES附加段指针(extra segment)
  • FS 附加段指针
  • GS附加段指针
    每个段寄存器都是16位的,包含指向内存特定段的起始位置的指针。CS 包含指向内存代码段中的指针。代码段是内存中存储指令码的位置。处理器按照 CS 寄存器的值和 EIP 指令指针寄存器中包含的偏移值从内存获得指令码。程序不能显式地加载或者改变 CS 寄存器。当程序被分配一个内存空间时,处理器将为 CS 寄存器赋值。
  1. 指令指针寄存器,EIP 有时也被称为程序计数器,它指向要执行的下一条指令。

  2. 标志寄存器,一个16位的标志寄存器,通常称为程序状态字(Program Status Word,PSW)PSW。

  • CF:进位标志,最高位产生了进位或借位,CF=1,否则CF=0
  • ZF:零标志,预算结果为0,ZF=1,否则 ZF=0
  • SF:符号标志,运算结果为负,SF=1,否则 SF=0
  • OF:溢出标志,有符号数的运算如果发生了溢出,OF=1,否则 OF=0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容