Appearance
题目
某计算机采用 16 位定长指令字格式,其 CPU 中有一个标志寄存器,其中包含进位/借位标志 CF、零标志 ZF 和符号标志 NF。假定为该机设计了条件转移指令,其格式如下:
其中,00000 为操作码 OP;C、Z 和 N 分别为 CF、ZF 和 NF 的对应检测位,某检测位为 1 时表示需检测对应标志,需检测的标志位中只要有一个为 1 就转移,否则就不转移,例如,若 C=1,Z=0,N=1,则需检测 CF 和 NF 的值,当 CF=1 或 NF=1 时发生转移;OFFSET 是相对偏移量,用补码表示。转移执行时,转移目标地址为 (PC)+2+2×OFFSET;顺序执行时,下条指令地址为 (PC)+2。请回答下列问题。
(1) 该计算机存储器按字节编址,还是按字编址?该条件转移指令向后(反向)最多可跳转最多少条指令?
(2) 某条件转移指令的地址为 200CH,指令内容如下图所示,若该执行时 CF=0,ZF=0,NF=1,则该指令执行后 PC 的值是多少?若该指令执行时 CF=1,ZF=0,NF=0,则该指令执行后 PC 的值又是多少?请给出计算过程。


(3) 实现“无符号数比较小于等于时转移”功能的指令中,C、Z 和 N 应各是什么?
(4) 以下是该指令对应的数据通路示意图,要求给出中部件①~③的名称或功能说明。

解析
本题考查条件转移指令的设计语义:多个标志位的"或"条件检测、相对寻址的目标地址公式、以及对应的硬件数据通路。
四个子问题串成一条线:先确定编址粒度和偏移范围 → 用样例指令做地址计算 → 反推某条件下的检测位设置 → 把整条数据通路的部件填齐。
(1) 编址单位与最大反向跳转条数 [2 分]
编址单位。 指令长 16 位 = 2 字节,且 (PC) + 2 即指向下一条指令 → 每加 2 跳过一个 16 位机器字 = 一条指令 → 按字节编址。
最大反向跳转条数。 OFFSET 是 8 位补码,范围:
向后取最大反向位移 OFFSET = :
每条指令占 2 字节,故距当前转移指令 254 字节 = 127 条 指令。
易错点: 8 位补码"向后"和"向前"不对称——OFFSET 范围 [−128, 127]。如果按"距下一条顺序指令" 计数,则向后 128 条;按"距当前转移指令"计数则 127 条。本题以"相对于当前条件转移指令"的口径作答更为常见。
【评分说明】若正确给出 OFFSET 取值范围,可酌情给分。
(2) 两种条件下 PC 执行后的值 [4 分]
题干图所示该条转移指令位于 200CH,C/Z/N = 0/1/1(即检测 ZF、NF),OFFSET = 11100011B = E3H。
通用计算流程:
- 看 C/Z/N 选择要检测的标志位;
- 任意一个被检测标志为 1 则转移,否则顺序;
- 转移地址 = (PC) + 2 + 2 × OFFSET,OFFSET 须先做 16 位符号扩展。
情形 A:CF = 0, ZF = 0, NF = 1。
需检测 ZF 和 NF。NF = 1 → 发生转移。
OFFSET = E3H 符号扩展到 16 位 = FFE3H。乘 2(左移 1 位)= FFC6H(这是 16 位补码表示的 −58):
情形 B:CF = 1, ZF = 0, NF = 0。
需检测 ZF 和 NF:ZF = 0 且 NF = 0 → 不转移。CF = 1 这里不被检测,与决策无关。
易错点: 检测位只是"启用了哪些标志位参与判定",被启用的标志中只要任意一个为 1 即转移;情形 B 中 CF = 1 没有被启用(C = 0),所以不能据此转移。
(3) "无符号 ≤" 转移的 C / Z / N 设置 [3 分]
思路: 比较 a 与 b,硬件做 a − b,看标志位的设置:
| 关系 | 减法结果 | ZF | CF(借位) | NF |
|---|---|---|---|---|
| a > b(无符号) | 正 | 0 | 0 | 0 |
| a = b | 0 | 1 | 0 | 0 |
| a < b(无符号) | 借位(真值变大数) | 0 | 1 | — |
a ≤ b ⟺ ZF = 1 或 CF = 1。无符号比较与符号位 NF 无关。
故 C = 1, Z = 1, N = 0。
易错点: 无符号比较看的是 CF(借位),带符号比较才看 NF(结果符号位)。例如 200 < 100 为假(无符号),但若按带符号读,则 200 = -56 < 100 为真——两套规则不同。
(4) 数据通路示意图中部件 ①②③ [3 分]
根据图中三个部件位于"取指 → 标志判定 → PC 更新"链路上的位置:
| 部件 | 名称 | 功能 |
|---|---|---|
| ① | 指令寄存器(IR) | 存放当前从 Cache 取出的条件转移指令,向标志判定逻辑供给 C/Z/N 字段,向地址加法器供给 OFFSET 字段 |
| ② | 左移寄存器(左移 1 位) | 实现 2 × OFFSET,把指令字节偏移变成实际字节位移(因按字节编址、指令对齐 2 字节) |
| ③ | 加法器 | 完成 (PC) + 2 + (2 × OFFSET) 的相加,输出转移目标地址;当判定不转移时,多路选择器选回 (PC) + 2 |
编者注(生僻术语): 这种"指令字节偏移做硬件 ×2"的设计是相对寻址的常见技巧——在指令编码层节省 1 个比特(不需要让最低位永远是 0),代价是多一级移位电路。RISC-V、MIPS 等真实 ISA 也都用这种方式扩展跳转范围。
【评分说明】合理给出部件名称或功能说明均给分。