# 4.1.4 Y86-64 异常
对 Y86-64 来说,程序员可见的状态(图 4-1)包括状态码 Stat,它描述程序执行的总体状态。这个代码可能的值如图 4-5 所示。代码值 1,命名为 AOK,表示程序执行正常,而其他一些代码则表示发生了某种类型的异常。代码 2,命名为 HLT,表示处理器执行了一条 halt 指令。代码 3,命名为 ADR,表示处理器试图从一个非法内存地址读或者向一个非法内存地址写,可能是当取指令的时候,也可能是当读或者写数据的时候。我们会限制最大的地址(确切的限定值因实现而异),任何访问超出这个限定值的地址都会引发 ADR 异常。代码 4,命名为 INS,表示遇到了非法的指令代码。
| 值 | 名字 | 含义 |
|---|---|---|
| 1 | AOK | 正常操作 |
| 2 | HLT | 遇到 halt 指令 |
| 3 | ADR | 遇到非法地址 |
| 4 | INS | 遇到非法指令 |
图 4-5 Y86-64 状态码。在我们的设计中,任何 AOK 以外的代码都会使处理器停止
对于 Y86-64,当遇到这些异常的时候,我们就简单地让处理器停止执行指令。在更完整的设计中,处理器通常会调用一个异常处理程序(exception handler),这个过程被指定用来处理遇到的某种类型的异常。就像在第 8 章中讲述的,异常处理程序可以被配置成不同的结果,例如,中止程序或者调用一个用户自定义的信号处理程序(signal handler)。