171. 指令 bvs
实现 Branch if Overflow Set(溢出置位时分支)行为。
第 171 / 356 · tests/chapter_01_cpu/test_171_instruction_bvs.py
在这一步中,向 `emulator/cpu/instructions.py::bvs` 添加:
def bvs(cpu: CPU, offset: int):
if cpu.flags.get_overflow_flag():
cpu.pc = (cpu.pc + offset) & 0xFFFF这一步存在的原因
步骤 163 已经解码了带符号的位移量,并且在 `bvs` 运行时 PC 已经指向下一条指令。因此 BVS 只需检测 Overflow,并在满足条件时加上该位移量,再将结果掩码到 CPU 的 16 位地址空间内。
不变量:Overflow 置位时执行分支;Overflow 清零时 PC 保持不变。不改变任何标志位、其他寄存器或内存。常见误解:BVS 只是观察 Overflow,它既不会设置 Overflow,也不会自行取操作数或做符号转换。
不在本步范围内:将 `bvs 导入 emulator/cpu/opcodes.py、创建其相对寻址的操作码处理函数,以及注册操作码 0x70`,都属于步骤 179。步骤 172-178 先接通其他分支操作码。
运行本课
uv run pytest tests/chapter_01_cpu/test_171_instruction_bvs.py -v