1.3.2 其它寄存器
其它的寄存器有特殊含义。一些寄存器存储系统级别的重要信息,因此不能被 OS 以外的程序修改。
图 1-3.Intel 64 位系统的近似:通用寄存器
程序员有 rip 寄存器的访问权。rip 是一个 64 位的寄存器,存储内容是下一条将要执行的指令的地址。分支指令(e.g. jmp)会修改这个寄存器的值。所以,每次有指令被执行完之后,rip 都会修改下一条将执行的指令的地址。
■Note 所有的指令都有不同的大小!
另外一个可访问的寄存器叫 rflags。这个寄存器存储各种 flag 信息,这些 flag 表示当前的程序状态---例如,上一条算术指令的执行结果是不是负数,是不是发生了溢出,等等。其低 32 位叫 eflags,低 16 位叫 flags。
■Question 1
是时候来使用文档[15]来做一些初级的调研工作了。参考第一卷的 3.4.3 来学习 rflags 这个寄存器。CF,AF,ZF,OF,SF 分别代表什么意思?
图 1-4.rax 分解
除了这些核心寄存器,还有一些专门给浮点数使用的寄存器,或者还有一些是提供特殊的并行指令,使其具备在多对操作数上进行类似操作的能力。这些指令一般是为多媒体类的需求服务的(这种需求需要加速多媒体的解码算法)。对应的寄存器是 128 位宽,名字是 xmm0 - xmm15。之后我们会对这些寄存器进行讨论。
一些寄存器在刚开始是非标准的扩展,不过很快就转正了。这些被称为 model-specific 寄存器。参见 6.3.1 小节,有更多的细节。