【问题标题】:Mars mips assembly , addi instead of OriMars mips 程序集,addi 而不是 Ori
【发布时间】:2022-12-03 02:37:22
【问题描述】:

有一个问题我看的各种回答都不能完全理解,这是指令集:

lui $1,0xffffff00
ori $12,$1,0x0000ffff
sra $10,$12,0x00000010
and $8,$12,$10

问题是如果将 Ori 指令更改为 addi , $8 的值是多少?

【问题讨论】:

  • addi 符号将 16 位常量扩展为 32 位,因此如果您的汇编器甚至接受该形式,0x0000ffff 将被解释为 0xffffffff 又名 -1。你可以自己解决剩下的问题。此外,您可以在模拟器/调试器中尝试代码。

标签: assembly mips


【解决方案1】:

问题是有许多 MIPS 汇编器,并且汇编器各不相同,因此您必须知道您正在使用哪个汇编器才能了解您实际获得的机器代码(或者它是否会接受该输入)。

那么从机器码来看,我们可以严格按照MIPS规范,准确知道一个代码序列是干什么的。

然而,addiori 在 MIPS 上的主要区别——除了“添加”与“或”部分之外——是尽管它们都是具有 16 位立即数的 I 型指令,但 addi 将采用符号扩展将 16 位立即数变为 32 位以进行加法运算,而 ori 将适用零扩展将 16 位立即数变为 32 位以进行逻辑或操作。

否则,由于$1 中的低位无论如何都是零,因此实际的加法与 or 没有区别:如果没有进位,加法与 or 是相同的,并且当加法为零时没有进位。

【讨论】:

  • 我认为 MIPS 没有进位标志。
  • 谁在谈论旗帜?我只是在说加法。
  • “差异:如果没有进位,加法与 or 是相同的,而当加法为零时,则没有进位。”
  • 那里没有提到旗帜。您是否理解加法涉及从 LSB 到更高位的进位传播,不像 OR,那里没有这样的传播?
  • 好,可以。
猜你喜欢
  • 2011-10-03
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
相关资源
最近更新 更多