我试着做了以下几点:
# with $s6 holding i+j andi $s7, $s6, 0x1 # (i + j) & 1 (to check if it's even) if: bneq $s7, $zero, else
但是它生成了一个错误...我做错了什么吗?
j7dteeu81#
也许您的汇编程序不喜欢0x1整数?
0x1
andi $s7, $s6, 1 bnez $s7, odd # branch if not-equal to Zero.
或者,如果您的汇编程序不喜欢寄存器的ABI名称,请使用寄存器编号?
andi $23, $22, 1 # $22=$s6 and $23=$s7
如果使用MARS或SPIM Simulator、clang或其他普通MIPS汇编程序,andi $s7, $s6, 0x1组装得很好。注意andi没有添加任何内容,因此i+j注解不匹配
andi $s7, $s6, 0x1
andi
i+j
和接收方,Rsrc1,立即
将寄存器Rsrc1与Imm中的整数的逻辑与值放入寄存器Rdest。
5uzkadbs2#
bneq不存在。用途
bne $s7,$zero,else
后期编辑:下面是一个工作示例
#include<mips/regdef> ... andi t1,t1,0x1
请添加任何错误消息!
pgpifvop3#
根据您的问题标题,我认为这个答案对其他人和我一样有用:因为,对于一个二进制值,如果它以0结尾,那么它是偶数,如果它以1结尾,那么它是奇数,所以,你基本上需要用移位逻辑指令来得到一个数的第一位,就像下面这样。
sll $t0, $s0, 0x1F srl $s1, $t0, 0x1F
3条答案
按热度按时间j7dteeu81#
也许您的汇编程序不喜欢
0x1
整数?或者,如果您的汇编程序不喜欢寄存器的ABI名称,请使用寄存器编号?
如果使用MARS或SPIM Simulator、clang或其他普通MIPS汇编程序,
andi $s7, $s6, 0x1
组装得很好。注意
andi
没有添加任何内容,因此i+j
注解不匹配和接收方,Rsrc1,立即
将寄存器Rsrc1与Imm中的整数的逻辑与值放入寄存器Rdest。
5uzkadbs2#
bneq不存在。
用途
后期编辑:
下面是一个工作示例
请添加任何错误消息!
pgpifvop3#
根据您的问题标题,我认为这个答案对其他人和我一样有用:
因为,对于一个二进制值,如果它以0结尾,那么它是偶数,如果它以1结尾,那么它是奇数,所以,你基本上需要用移位逻辑指令来得到一个数的第一位,就像下面这样。