我试图在MIPS模拟器SPIM中使用argc和argv来制作程序。这是我的密码:
.data
nl: .asciiz "\n"
.globl main
.text
main:
# print argv[0]
lw $a0, 0($a1)
li $v0, 4
syscall
# print "\n"
li $v0, 4
la $a0, nl
syscall
# exit
li $v0, 10
syscall当我跑的时候
$ spim -f args.s
Loaded: /usr/share/spim/exceptions.s
args.s我得到正确的结果argv[0] (程序名称)。但如果我试着
$ spim -f args.s hello
Loaded: /usr/share/spim/exceptions.s
Cannot open file: `(null)'
Memory address out of bounds我明白那个错误。我到处找,但什么也找不到。向argv[]传递参数的正确方法是什么?将代码中的lw更改为lw $a0, 4($a1)将获得以下输出。
$ spim -f args.s hello
Loaded: /usr/share/spim/exceptions.s
Cannot open file: `(null)'
SHELL=/bin/zsh我在虚拟控制台上试过,结果是一样的。在打印所有环境变量更改lw中的偏移量后,它只会打印“内存地址超出界限”。
我不知道我做错了什么。
发布于 2022-05-07 02:16:18
终于解决了。使用程序参数的正确方法确实是
$ spim -f code.s arg1 arg2 etc当我说我是从8月安装它的时候,我发现我错了,我用官方Sourceforge上的最后一张快照从源代码编译它。spim.cpp中有一个bug。在第278行之后,应该说是break;,它运行得完美无缺。我已经在Sourceforge创建了一张票证,这样他们就可以修补它了。
https://stackoverflow.com/questions/72116237
复制相似问题