【发布时间】:2017-06-22 02:05:13
【问题描述】:
来自Sparc architecture manual,第110页Add指令:
“如果 i = 0,ADD 和 ADDcc 计算“R[rs1] + R[rs2]”。如果 i = 1,它们计算 “R[rs1] + sign_ext(simm13)”。无论哪种情况,总和都会写入 R[rd]。”
阅读程序集时,我如何知道是 i=0 还是 i=1 ?反汇编代码中的助记符/操作码看起来没有任何变化。
【问题讨论】:
来自Sparc architecture manual,第110页Add指令:
“如果 i = 0,ADD 和 ADDcc 计算“R[rs1] + R[rs2]”。如果 i = 1,它们计算 “R[rs1] + sign_ext(simm13)”。无论哪种情况,总和都会写入 R[rd]。”
阅读程序集时,我如何知道是 i=0 还是 i=1 ?反汇编代码中的助记符/操作码看起来没有任何变化。
【问题讨论】:
“i”表示指令中的“立即”值。立即数是常数。所以你会看到这样的东西:
add %g1, 59, %g1
这意味着“将常数 59 添加到 g1 并将结果放入 g1”。
当i=0时,表示参数不是立即数。所以这是一个寄存器!你会在汇编或反汇编中看到这个:
add %g1, %o3, %g1
这意味着添加寄存器 g1 和 o3 并将结果放入 o3。
【讨论】: