一些 MIPS 指令具有立即偏移量。例如,在移动lw
命令以填充 下方的分支延迟槽时beq
,其直接偏移量从 100 变为 96。
PC Loop: lw $2, 100($3)
PC+4 addi $3, $3, 4
PC+8 beq $3, $4, Loop
转化成
PC Loop: addi $3, $3, 4
PC+4 beq $3, $4, Loop
PC+8 lw $2, 96($3) # branch delay slot
是不是因为 PC 总是 PC+4,所以它是 100 - 8 + 4 = 96 ?如果指令向上移动会发生什么?例如,
PC Loop: xxxxxxxxxxxxx
PC+4 addi $5, 4($5)
这会是正确的吗?
PC Loop: addi $5, 4($5)
PC+4 xxxxxxxxxxxxx