【发布时间】:2018-05-10 14:17:13
【问题描述】:
我是 MIPS 的新手,我编写了一个基本格式,我认为我编写的 C 文件中的代码相当于 MIPS。 我的任务是将以下我编写的 C 文件转换为 MIPS 应该是的直接翻译。我当前的 C 代码是:
#include <stdio.h>
int d2b(int d)
{
if(d == 0)
{
return;
}
else
{
return (d %2 + 10 * d2b(d/2));
}
}
int main()
{
int d = 99;
int b;
b = d2b(d);
printf("Input => %d \n", d);
printf("Output => %d ", b);
return;
}
到目前为止,我有以下内容:
.data
msg1 .asciiz “Number is “
msg2 .asciiz “\nConverted to \n“
.text
.globl main
main:
li $v0, 4
la $a0, msg1
syscall
li $v0, 5 #Exit syscall
syscall
add $a0, $v0, $zero
jal fact
add $a0, $v0, $zero
li $v0, 1
syscall
li $v0, 10
la $a0, msg2
syscall
fact:
li $t0 0 #load 0
beq $a0, $t0, skip #test n
li $v0 0
jr $ra
skip:
subu $sp, $sp, 32
sw $ra 20($sp)
sw $fp, 16($sp)
addiu $fp, $sp, 28
sw $a0, 0($fp) #save n
li $t1 2 #load 2
divu $a0 $t1 #n / 2
mfhi $t2 #remainder
mflo $t3 #quotient
move $a0, $t3 #n = quotient
addi $v0, $a1, 10
jal fact
lw $a0, 0($fp) #restore n
multu $v0, $a0
lw $ra, 20($sp)
lw $fp, 16($sp)
addiu $sp, $sp, 32
jr $ra
我的主要问题是不知道如何使用系统调用,也没有真正理解 MIPS 中的递归函数。请指出我的错误和错误!
【问题讨论】:
-
也许你应该检查这个网站:codereview.stackexchange.com 并在那里提交你的问题。
-
如果代码不起作用,那么它就不适合了,@siserte。从最后一句话来看,代码似乎不起作用,因此很可能会在发布到 Code Review 后不久关闭。