MIPS布尔分支输出

时间:2013-11-19 12:56:02

标签: assembly boolean mips

我不完全确定如何编写这个程序,并迫切需要帮助:

说明:

编写执行以下操作的MIPS程序:

  • 将正整数n放入寄存器$a0(例如li $a0,13
  • 如果整数是偶数,则用n / 2替换寄存器内容;否则,用3n + 1替换寄存器内容。(不要使用MIPS乘法运算;找出另一种方法。)
  • 使用syscall
  • 打印寄存器内容

1 个答案:

答案 0 :(得分:0)

我知道如果看起来你没有咨询谷歌,那么这种联合可能会非常粗糙。但我认为你的第二颗子弹上有一个有效的问题 - 或者至少,这是它会引发我的问题:

  • 如何判断整数是否均匀?

在HLL中,您将使用模运算:if (n % 2 == 0) { // is even }。但是在装配中,你必须采用不同的方式。看看最后一点 - 如果它为零,那就是偶数。

andi $t1, $t0, 0x01
beq $t1, $zero, isEven
  • 如何在不使用乘法或除法的情况下用n / 2替换寄存器内容?

这是我最喜欢的装配之一。乘以除以2就像从日志上掉下来一样容易。你只需要移位。在十进制中,您通过移位数字乘以基数(10),因此123 * 10 = 1230和1230/10 = 123.二进制(基数2)相同:0111 * 2 = 1110和1110/2 = 0111。所以所有你需要做的事情(int)将$t2除以2是:

srl $t2, $t2, 1
  • 我假设您可以使用3n + 1的添加功能。我不知道这样做的“可爱”方式。