将C转换为mips汇编

时间:2015-05-13 15:14:20

标签: c assembly input mips

我有这个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

这里有什么问题吗?

1 个答案:

答案 0 :(得分:1)

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

如果使用系统调用1打印整数,则应将值放在寄存器$a0中打印。