我只是想分支到不同的代码段,给定一个数字是正数还是负数,使用 MIPS 程序集,这是应该这样做的短段:

lbu $4, digit
and $5, $4, 0x80
srl $5, $5, 31
bgt $5, 0, positive
b negative

该数字成功地为 4 美元,我将它与 1 与后面的所有零进行按位和,以获得第一位是 1 还是 0,然后我右移 31 位使其位于最后一个位置,然后我检查它是否大于 0,如果是,则分支为正,否则,分支为负。

我确定我在某处搞乱了逻辑,而且我也不确定我是否可以像那样使用 0(在 bgt 中),或者我是否应该使用 $0

有任何想法吗?谢谢!

最佳答案

我认为您正在将字节移出图片。使用你的方法,你应该将它移动 7 位,而不是 31。但是......

根据 http://www.ece.umd.edu/~manoj/759M/MIPSALM.html ,您可以使用 lbu 而不是使用 lb 。这将复制您正在加载的字节的第 7 位的值,并将其放入目标寄存器的第 8-31 位。然后你可以使用 bgez 来做分支。

lb $4, digit
bgez $4, positive
b negative

但是在我的生活中从未写过一个字节的 MIPS 汇编程序,你也许应该对这个答案持保留态度。祝你好运!

关于assembly - 确定数字的符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13591023/

10-12 22:34