【问题标题】:dealing with immediate offsets when moving instruction to fill the branch delay slot in MIPS在移动指令以填充 MIPS 中的分支延迟槽时处理立即偏移量
【发布时间】:2012-10-21 18:28:32
【问题描述】:

某些 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

【问题讨论】:

    标签: assembly mips


    【解决方案1】:

    即时的变化与PC无关。

    Loop: lw $2, 100($3)
          addi $3, $3, 4
          beq  $3, $4, Loop
    

    在原版中,您从地址 ($3 + 100) 加载,然后将 4 添加到 $3。

    Loop: addi $3, $3, 4
          beq $3, $4, Loop
          lw $2, 96($3) # branch delay slot
    

    在转换后的中,您将 4 添加到 $3,然后从地址 ($3 + 96) = (original_$3 + 4 + 96) = (original_$3 + 100) 加载。 lwaddi 之间的重新排序会影响立即数(addi 不能移动到延迟槽,因为分支取决于 $3 的新值)。

    【讨论】:

      猜你喜欢
      • 2011-06-03
      • 1970-01-01
      • 2012-04-16
      • 2013-11-18
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      相关资源
      最近更新 更多