Appearance
题目
某机器有一个标志寄存器,其中有进位/借位标志 CF、零标志 ZF、符号标志 SF 和溢出标志 OF,条件转移指令 bgt(无符号整数比较大于时转移)的转移条件是 ( )
错因
A
把 OF(溢出)和 SF(符号)混着用了。OF 和 SF 是给有符号比较用的——无符号比较不会发生"溢出"这个概念,只会"借位"(CF)。无符号 bgt 的判定不应该出现 OF,看到 OF 就要警觉这条不对。
B
等价于 SF=0 且 ZF=0,即"结果为正且非零"——这是有符号 bgt(在无溢出情况下的简化形式)的条件。考生选 B 多半是误认为 "bgt 就是大于",没区分有符号 / 无符号。题目里明写"无符号整数比较",符号位 SF 在无符号比较里没有意义。
D
等价于 CF=0 且 SF=0,混搭了无符号(CF)和有符号(SF)的标志,逻辑上不成立——一个完整的比较条件不会跨越两套体系。选 D 通常是猜的:知道要用 CF(无符号),但又错把"非负"翻译成 SF=0。
总解析
核心思路:用 SUB 指令计算 ,用产生的标志位反推 与 的关系。
第一步:识别用哪些标志位
| 比较类型 | 关键标志 | 说明 |
|---|---|---|
| 无符号比较 | CF, ZF | 借位 = 不够减;零 = 相等 |
| 有符号比较 | SF, OF, ZF | 符号位 + 溢出位组合判断真实大小 |
题目说"无符号整数比较"——锁定 CF 和 ZF,OF / SF 不参与。
第二步:分析无符号 SUB 后 CF/ZF 的取值
执行 后:
| CF | ZF | 含义 |
|---|---|---|
| 0 | 0 | 不借位()且不相等 → ✓ |
| 0 | 1 | 不借位且相等 → |
| 1 | 0 | 借位()且不相等 → |
| 1 | 1 | 不可能(借位发生意味着结果非零) |
第三步:写出 bgt(无符号 )的条件
⟺ CF = 0 且 ZF = 0 ⟺
用德摩根律转换:
所以转移条件可写作 ,对应 选项 C。
第四步:与相关指令区分
| 指令 | 全称 | 转移条件 |
|---|---|---|
| bgtu / bgt(无符号) | branch if greater than(u=unsigned) | |
| bgeu(无符号) | branch if greater or equal | (即 CF = 0) |
| bltu(无符号) | branch if less than | |
| beq(相等) | branch if equal |
记忆要点:
- 无符号比较只看 CF 和 ZF——OF/SF 是有符号比较专用
- 大于(不等于) = "不借位 且 不相等" → 两个标志都为 0
- "都为 0"的逻辑写法是 或等价的 (德摩根律)
最终答案是 C()。
编者注(格式修复):原题选项 B/C/D 中含有 KaTeX
\overline{...}上横线,纯文字版无法表达,已根据题图(2011-17.assets/image-20260426131201256.png)补回。所有上横线均覆盖整个 "X + Y" 表达式。