我有这个用于识别奇数的C程序:

#include <math.h>
#include <stdio.h>

int impar (int x)
{
    if (x%2 != 0)
        return 1;
    else
        return 0;
}

void test ()
{
    int x;
    while(scanf("%d", &x) != EOF)
    {
        int y = impar(x);
        printf("%d\n", y);
    }
}

int main (void)
{
    test();
    return 0;
}


我需要将其转换为MIPS程序集。到目前为止,我得到了:

.data
.globl main
linha1: .asciiz "Numero a inserir\n"
.text
body:
    la $a0, linha1      # carrega o endereco da linha1 para syscall
    li $v0,4            # servico de print da string
    syscall

    main:
    li $v0,7            # servico para ler um inteiro
    syscall
    div $t0, $v0, 2 # divisao do x por 2
    mfhi $t9 #mover o resto para t9
    li $t3, 0
    bne $t3, $t9, if
    beq $t3, $t9, else


    if:
    add $t6, $v0, 1
    li $v0,3            # servico para imprimir um inteiro
    syscall
    li $v0,10           # servico para terminar o programa

    else:
    add $t6, $v0, 0
    li $v0,3            # servico para imprimir um inteiro
    syscall
    li $v0,10           # servico para terminar o programa


使用输出上的数字时遇到问题,因为输出始终为0.00.0

有什么主意吗

最佳答案

系统调用3和7是print_doubleread_double。这与使用%d格式说明符(即十进制整数)的C代码不匹配。如果打算读取和写入整数,则应改用syscalls 1和5。

如果使用syscall 1打印整数,则应将要打印的值放在寄存器$a0中。

08-19 18:00