MIPS汇编语言中的Scanf?

MIPS汇编语言中的Scanf?,c,mips,C,Mips,我了解MIPS的基本功能,但不了解如何声明变量,尤其不了解如何在MIPS中编写scanf()/printf()的等价物(搜索时无法在线找到有关它们的任何信息)。以下是我目前正在尝试翻译的代码: #include <stdio> int main(int argc, char* argv[]) { unsigned long int n; scanf("%d", &n); printf("%lu",fact(n)); } #包括 int main(int ar

我了解MIPS的基本功能,但不了解如何声明变量,尤其不了解如何在MIPS中编写scanf()/printf()的等价物(搜索时无法在线找到有关它们的任何信息)。以下是我目前正在尝试翻译的代码:

#include <stdio>
int main(int argc, char* argv[]) 
{ 
 unsigned long int n; 
 scanf("%d", &n); 
 printf("%lu",fact(n)); 
}
#包括
int main(int argc,char*argv[])
{ 
无符号长整数n;
scanf(“%d”和“&n”);
printf(“%lu”,事实(n));
}
有什么指导吗?

您可能不想在汇编中重新实现scanf。用C或其他高级语言实现更高效。更好的办法是获得一个开源实现,比如在glibc中

以下是glibc中scanf()的源代码:


下面是一个类似GPL的实现:

您可能正在寻找MIPS模拟器系统调用(syscalls)。这是和的

syscall 7的读取是双精度的,这大致相当于
scanf(“%d”,&n)

syscall 1是print integer,相当于
printf(“%u”,n)


#包括
?顺便说一句,它不是MIPS汇编程序,它只是一个C。是的,对不起,这是最重要的。你可以试着为MIPS编译它并查看程序集。
scanf
本身是一个相当长的例程,使用了大量的表和子例程。它甚至是。用MIPS写同样的东西是徒劳的。由于您只需要一个数字,请尝试在循环中输入较低级别的一个字符。我正在阅读有关syscall atm的内容
li   $v0, 1    # service 1 is print integer
move $a0, $t0  # move register to be printed into argument register $a0
syscall