
如图 4-1 所示,Y86-64 程序中的每条指令都会读取或修改处理器状态的某些部分。这称为程序员可见状态,这里的"程序员”既可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器。在处理器实现中,只要我们保证机器级程序能够访问程序员可见状态,就不需要完全按照 ISA 暗示的方式来表示和组织这个处理器状态。 Y86-64 的状态类似于 x86-64。有 15 个程序寄存器:%rax %rcx、%rdx、%rsp、%rbp、%rsi、%rdi 和 %r8 到 %r14。(我们省略了 x86-64 的寄存器 %r15 以简化指令的编码。)每个程序寄存器存储一个 64 位的字。寄存器 %rsp 被入栈、出栈、调用和返回指令作为栈指针。除此之外,寄存器没有固定的含义或固定值。有 3 个一位的条件码:ZF、SF 和 OF,它们保存着最近的算术和逻辑指令所造成的影响的有关信息。程序计数器(PC)存放当前正在执行指令的地址。
内存从概念上来说就是一个很大的字节数组,保存着程序和数据。Y86-64 程序用虚拟地址来引用内存位置。硬件和操作系统软件联合起来将虚拟地址翻译成实际或物理地址,指明数据实际存在内存中哪个地方。第 9 章将更详细地研究虚拟内存。现在,我们只认为虚拟内存系统向 Y86-64 程序提供了一个单一的字节数组映像。
程序状态的最后一个部分是状态码 Stat,它表明程序执行的总体状态。它会指示是正常运行,还是出现了某种异常,例如当一条指令试图去读非法的内存地址时。在 4.1.4 节中会讲述可能的状态码以及异常处理。
网友评论