170. 指令 bvc

实现“溢出清零时分支”行为。

170 / 356 · tests/chapter_01_cpu/test_170_instruction_bvc.py

为什么需要这一步

BVC 观察现有的、由带符号运算产生的溢出条件,当该标志清零时进行分支,而不会修改它。

在这一步中,在 BMI 之后,请恰好添加

`emulator/cpu/instructions.py::bvc`::

def bvc(cpu: CPU, offset: int):
    if not cpu.flags.get_overflow_flag():
        cpu.pc = (cpu.pc + offset) & 0xFFFF

如果溢出标志清零,它会把带符号的相对位移加到操作数之后的 PC 上,并把目标地址掩码限制在 16 位地址空间内。

不变量:溢出标志清零时发生分支;溢出标志置位时 PC 保持不变。该指令不会改变任何标志位、其他寄存器或内存。常见误解:BVC 既不会清除溢出标志,也不会根据进位标志或偏移量的符号来做判断。

超出范围:与之互补的 BVS 属于第 171 课。分支指令导入、相对寻址操作码处理函数及表项属于第 172-179 课。

运行本课

uv run pytest tests/chapter_01_cpu/test_170_instruction_bvc.py -v