向 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 位。
这是一道作业题,我卡住了,因为我不知道如何评估一个值是否大于另一个值。
这是我需要添加的指令:
sgti 指令 - 设置大于立即数 - 是一条允许在一个值大于另一个值时将寄存器设置为 1 的指令:
sgti rd, rs, imm #if R[rs] > ext32 (imm) then R[rd] = 1 otherwise R[rd] = 0
这是我的电路:
对于有符号加法,会发生溢出
- 当正数与正数相加结果为负数时
- 负数与负数相加结果为正数时
对于带符号的减法,会发生溢出
- 当给定一个正数时,我们减去一个负数,结果为负数
- 当给定一个负数时,我们减去一个正数,结果为正数
快速阅读这些应该具有数学意义(两个正数之和不能为负)。
您可以检查这些条件以确定溢出。
发生溢出时,只需比较输入的符号即可确定结果。
所以,这是一个方法:
检查符号,如果符号相反,则正的大。
- 换句话说,对符号进行异或,如果异或结果为 1,则它们具有不同(相反)的符号。
- 那么
sgti
的答案就是立即数的符号,也是rd取反的符号。
- 那么
- 换句话说,对符号进行异或,如果异或结果为 1,则它们具有不同(相反)的符号。
否则它们要么都是正数要么都是负数,减法应该会产生正确的结果而不会溢出
- 所以答案在减法结果的符号位具体来说,结果取反的符号就是
sgti
的答案。
- 所以答案在减法结果的符号位具体来说,结果取反的符号就是
符号位是高位,MSB,也就是第 31 位。