c - 将 C 翻译为 mips 汇编

标签 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

你知道这里出了什么问题吗?

最佳答案

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

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

关于c - 将 C 翻译为 mips 汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30218936/

相关文章:

c macOS 中的段错误;有时,有时不

c - 如何显示轮盘的随机数(和颜色)?

assembly - INT 16h/AH=0h 不等待引导加载程序中的按键

jquery css 将输入大纲更改为无

javascript - 简单的按键事件不能在 jquery 上正常工作

c - printf() 和 float 错误

程序的其余部分是否可以访问局部变量,或者是否可以在不使用 malloc 的情况下加载哈希表

assembly - BIOS int 13h 无法读取第一条磁道

assembly - x86/x64 : modifying TSS fields

javascript - 使用 html 输入重新加载文件