我有一个用于识别奇数的 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_double
和 read_double
。这与您的 C 代码不匹配,该代码使用 %d
格式说明符(即十进制整数)。如果您打算读取和写入整数,您应该使用系统调用 1 和 5。
如果您使用系统调用 1 来打印整数,则应该将要打印的值放在寄存器 $a0
中。
关于c - 将 C 翻译为 mips 汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30218936/