考虑以下 MIPS 程序集(我正在使用 MIPS,因为这是我的计算机组织和设计书使用的):
beq $s0, $s1, L1
add $t0, $t1, $t2
...
L1: ...
因为 MIPS 只使用 16 位作为beq
指令中的 PC 相对地址,如果L1
离 足够远beq
,汇编器必须用两条指令(一个跳转有 26 位地址)和一个新标签来替换它:
bne $s0, $s1, L2
j L1
L2: add $t0, $t1, $t2
...
L1: ...
如果这还不够,它可能需要多次跳转。
汇编器在知道L1
. 由于它最初不知道beq
(1 条指令或 2 条指令)的大小,它如何在第一次通过时使位置计数器保持最新?