次のMIPSアセンブリについて考えてみます(MIPSを使用しているのは、それが私のComputer Organisation and Designブックで使用されているためです)。
beq $s0, $s1, L1
add $t0, $t1, $t2
...
L1: ...
beq
MIPSは命令のPC相対アドレスに16ビットしか使用しないため、L1
から十分に離れているbeq
場合、アセンブラはそれを2つの命令(ジャンプのアドレスは26ビット)と新しいラベルに置き換える必要があります。
bne $s0, $s1, L2
j L1
L2: add $t0, $t1, $t2
...
L1: ...
これでも不十分な場合は、複数回のジャンプが必要になる場合があります。
アセンブラは、の場所を知るまで、この置換を行う必要があるかどうかを知りませんL1
。最初は(1命令または2)のサイズがわからないのでbeq
、最初のパスでロケーションカウンターを最新の状態に保つにはどうすればよいですか?