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