检查 MIPS 中寄存器值是否为偶数/奇数
我尝试执行以下操作:
# with $s6 holding i+j
andi $s7, $s6, 0x1 # (i + j) & 1 (to check if it's even)
if: bneq $s7, $zero, else
但是它会生成错误...我做错了什么吗?
I tried to do the following:
# with $s6 holding i+j
andi $s7, $s6, 0x1 # (i + j) & 1 (to check if it's even)
if: bneq $s7, $zero, else
however it generates an error... am I doing something wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
也许您的汇编器不喜欢
0x1
整数?或者,如果您的汇编器不喜欢寄存器的 ABI 名称,请使用寄存器编号?
如果您使用 MARS 或 SPIM Simulator,或者 clang 或其他普通的 MIPS 汇编器,
andi $s7, $s6, 0x1
汇编得很好。注意
andi
没有添加任何内容,因此i+j
注释不匹配Perhaps your assembler doesn't like
0x1
integers?Or if your assembler doesn't like ABI names for registers, use register numbers?
If you use MARS or SPIM Simulator, or clang or other normal MIPS assemblers,
andi $s7, $s6, 0x1
assembles just fine.Note
andi
doesn't add anything, so thei+j
comment doesn't matchbneq 不存在。
使用
帖子编辑:
这是一个工作示例
请添加任何错误消息!
bneq does not exist.
Use
Post edit:
Heres a working example
Please add any error msg!
根据你的问题标题,我认为这个答案对其他人和对我一样有用:
因为,对于二进制值,如果它以 0 结尾,它是偶数,如果它以 1 结尾,它是奇数。因此,您基本上需要使用如下所示的移位逻辑指令来获取数字的第一位。
Following your question title, I thought this answer could be as useful to someone else as it was for me:
Since, for a binary value, if it ends with 0, it's even, if it ends with 1, it's odd. So, you basically need to get the first bit of a number with shift logical instructions like bellow.