确定数字的符号

时间:2012-11-27 18:49:51

标签: assembly mips

我只是尝试分支到不同的代码段,给定一个正数或负数的数字,使用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

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:4)

我认为你正在改变你的字节方式。使用你的方法,你应该将它移位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汇编程序的一个字节,你或许应该用一点点盐来回答这个问题。祝你好运!