【发布时间】:2020-03-20 23:26:32
【问题描述】:
我正在使用 MARS 模拟器在 MIPS 中开发一个程序来读取和写入 .pgm 文件。它由几个包含不同帮助函数的文件组成,但就本问题而言,有两个文件值得关注:main.asm 和 writeimage.asm。
在writeimage.asm的.data段中,我要初始化: 字符串文字“P5\n” 字符串文字“P2\n” 缓冲区大小,这样我就可以使用此参数而无需硬编码缓冲区大小。
这是 writeimage.asm 的“序言”(如果我可以这么称呼的话):
.data
myStack: .space 5
writeBuffer: .space 128
.align 2
writeBufferSize: .word 128
.align 2
p5: .ascii "P5\n"
.align 2
p2: .ascii "P2\n"
.text
.globl write_image
write_image: ...
由于某种原因,当我从 main 运行我的程序时,当我尝试像这样访问 writeBufferSize 时:
la $t0, writeBufferSize
lw $s0, ($t0)
加载到$s0 的值为零。此外,字符串p2 和p5 似乎不存在于 MARS 所说的地址中。稍后在代码中,我尝试将这些字符串写入文件,当我将字符串的地址加载到$a1 并执行系统调用,打印到文件中的内容什么都不是;当我查看加载到$a1 中的地址并使用调试器查看该内存地址的内容时,它是空白的,就好像该字符串从未存在过一样。
我只组装 writeimage.asm 时没有这个问题,只有当我从 main 组装时,以及当我组装目录中的所有文件时。
对此我感到非常沮丧,我真的不想在我的代码中硬编码缓冲区长度。请帮忙!
谢谢
【问题讨论】:
标签: mips mars-simulator