Mips 定义输入整数是否除以2的程序

Mips 定义输入整数是否除以2的程序,mips,Mips,我试图在QtSpim上制作一个程序,该程序不断地将新的整数作为输入(通过控制台),然后仅当它们是偶数时才在控制台上打印它们。我将输入5设置为退出案例。程序按照它应该的方式编译,当我按下运行按钮时,似乎没有问题。问题是当我尝试键入输入号码时,因为控制台没有响应(我刚才键入的号码甚至没有出现在屏幕上)。 这是我的代码,我想错误一定在读取输入号码的第一行,但我找不到: .text .globl __start __start: li $v

我试图在QtSpim上制作一个程序,该程序不断地将新的整数作为输入(通过控制台),然后仅当它们是偶数时才在控制台上打印它们。我将输入5设置为退出案例。程序按照它应该的方式编译,当我按下运行按钮时,似乎没有问题。问题是当我尝试键入输入号码时,因为控制台没有响应(我刚才键入的号码甚至没有出现在屏幕上)。 这是我的代码,我想错误一定在读取输入号码的第一行,但我找不到:

        .text
            .globl __start
    __start:
        li $v0,5
        syscall
        move $t0,$v0
        add $t1,$t0,$zero
        addi $t2,$zero,5
        LOOP:   div $t0,$t0,2
            bne $t0,$zero,LOOP
    mfhi $t3
    bne $t3,$zero,REPEAT
    li $v0,1
    move $a0,$t3
    syscall
    REPEAT:bne $t1,$t2,__start
    li $v0,10
    syscall

        .data

您检查偶数的方法不正确。每当您输入一个大于等于1的数字时,您将在循环的最后一次迭代中将1除以2。当然,1 MOD 2是1,所以你的代码总是认为这个数字是奇数

单除以2就足以确定该值是奇数还是偶数。但是
操作将更加有效:

andi $t0,$t0,1   # if the least significant bit is set, the number is odd
bne $t0,$zero,REPEAT

在进行更改之后,您可能还必须更改打印代码,因为要打印的值不再位于
$t3

中,可以使用按位
以更简单的方式完成

每个奇数都将设置最后一位,这将使
number&1
等于
1

.text
.globl __start
__start:
    li $t0, 5
    loop:
        move $v0, $t0       # set $v0 to 5: read integer
        syscall         # read in the number

        andi $t1, $v0, 1    # check if it's divisible by 2
        bnez $t1, check     # if no, jump to a check for 5

        move $a0, $v0       # if yes, print it
        li $v0, 1       # set $v0 to 1: print integer
        syscall         # do the printing
        j loop          # continue

        check:
            bne $t0, $v0, loop  # if the integer read is not equal to 5, run again

    li $v0, 10
    syscall             # exit

你想用你的代码实现什么?@user35443程序应该不断地读取新的整数输入,并决定它是否偏离2。在这种情况下,在控制台上打印整数。它还应该不断地读取新输入并重复该过程(打印-如果它被2除,否则-什么也不做,只读取下一个输入)。当给定的输入是数字5时,程序停止(我随机选择了它,只是为了不存在infinιte循环)。非常感谢,但当我在QtSpim上运行代码时,我无法在控制台中输入输入数字,这是我最初的问题。@Konstantina问题一定在其他地方。我在火星4.5上测试了这个,它成功了perfectly@Konstantina如果我的回答对您有帮助,请选中左侧的绿色“OK”按钮接受。