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

Add instruction greater than immediate to MIPS

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

这是我需要添加的指令:

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

sgti rd, rs, imm #if R[rs] > ext32 (imm) then R[rd] = 1 otherwise R[rd] = 0

这是我的电路:

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

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

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

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

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

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

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

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


所以,这是一个方法:

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

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

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

符号位是高位,MSB,也就是第 31 位。