向 MIPS 添加大于立即数的指令

Lyn*_*ynn 0 cpu assembly mips cpu-architecture alu

这是一个家庭作业问题,我被卡住了,因为我不知道如何评估一个值是否大于另一个值。

这是我需要添加的说明

sgti 指令 - 设置为大于立即数 - 是一种允许在一个值大于另一个值时将寄存器设置为 1 的指令:

sgti rd, rs, imm #if R[rs] > ext32 (imm) 然后 R[rd] = 1 否则 R[rd] = 0

这是我的电路

这是我的电路: 例如,我知道如何通过在 UAL 中进行减法并查看是否设置了零来评估一个值是否 == 另一个值,但我不知道如何检查是否大于。谢谢

Eri*_*idt 5

对于签名加法,会发生溢出

  • 当正数与正数相加结果为负数时
  • 当负数与负数相加结果为正数时

对于有符号减法,会发生溢出

  • 当给定一个正数时,我们减去一个负数,结果是负数
  • 当给定一个负数时,我们减去一个正数,结果是正数

快速阅读这些应该具有数学意义(两个正数之和不能为负)。

您可以检查这些条件以确定溢出。

发生溢出时,您只需比较输入的符号即可确定结果。


所以,这里有一个方法:

  • 检查符号,如果它们相反,则正的更大。

    • 换句话说,对符号进行异或,如果异或结果为 1,则它们具有不同(相反)的符号。
      • 答案sgti是那么直接的符号,这也是 rd 否定的符号。
  • 否则它们要么都是正数要么都是负数,减法应该产生正确的结果而不会溢出

    • 所以答案具体在减法结果的符号位中,取反结果的符号是 的答案sgti

符号位是高位,MSB,又名第 31 位。

  • 符号位 A[31] 告诉我们 A 是正数还是负数。 (2认同)