首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SPIM中输入命令行参数

如何在SPIM中输入命令行参数
EN

Stack Overflow用户
提问于 2022-05-04 16:17:17
回答 1查看 106关注 0票数 1

我试图在MIPS模拟器SPIM中使用argcargv来制作程序。这是我的密码:

代码语言:javascript
复制
.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

当我跑的时候

代码语言:javascript
复制
$ spim -f args.s
Loaded: /usr/share/spim/exceptions.s                                                                    
args.s

我得到正确的结果argv[0] (程序名称)。但如果我试着

代码语言:javascript
复制
$ 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)将获得以下输出。

代码语言:javascript
复制
$ spim -f args.s hello
Loaded: /usr/share/spim/exceptions.s
Cannot open file: `(null)'
SHELL=/bin/zsh

我在虚拟控制台上试过,结果是一样的。在打印所有环境变量更改lw中的偏移量后,它只会打印“内存地址超出界限”。

我不知道我做错了什么。

EN

回答 1

Stack Overflow用户

发布于 2022-05-07 02:16:18

终于解决了。使用程序参数的正确方法确实是

代码语言:javascript
复制
$ spim -f code.s arg1 arg2 etc

当我说我是从8月安装它的时候,我发现我错了,我用官方Sourceforge上的最后一张快照从源代码编译它。spim.cpp中有一个bug。在第278行之后,应该说是break;,它运行得完美无缺。我已经在Sourceforge创建了一张票证,这样他们就可以修补它了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72116237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档