我已经尝试使用QtSpim 9.1.16和9.1.17,它们全部“剪切”了输入字符串的前2个字符,将它们设置为0x0
,其他ASCII字符正确地保存到了缓冲区中。这是我的摘录,即使我在互联网上找到的其他代码也能得到相同的结果:
.data # ROM area
str_input: .asciiz "Digita la stringa che vuoi controllare (max 10 caratteri): "
.data # RAM area
buffer: .space 11
.text
.globl main
main: li $v0, 4
la $a0, str_input
syscall # syscall to print user message
#------
la $a0, buffer
li $a1, 11
li $v0, 8
syscall
例如,如果我输入“ 12345”,那就是内存转储:
User data segment [10000000]..[10040000]
[10000000]..[1000ffff] 00000000
[10010000] 69676944 6c206174 74732061 676e6972 D i g i t a l a s t r i n g
[10010010] 68632061 75762065 6320696f 72746e6f a c h e v u o i c o n t r
[10010020] 616c6c6f 28206572 2078616d 63203031 o l l a r e ( m a x 1 0 c
[10010030] 74617261 69726574 00203a29 3433000a a r a t t e r i ) : . . . 3 4
[10010040] 00000035 00000000 00000000 00000000 5 . . . . . . . . . . . . . . .
[10010050]..[1003ffff] 00000000
我是否缺少有关QtSpim的信息?
根据我的最高评价,我添加了一个syscall 4来回显缓冲区内容,并添加了syscall 10来退出程序。
spim可能很古怪(例如,“掉在世界的边缘”)。也就是说,如果程序未正确终止。
当我添加了两个系统调用时,我为程序提供了一个“软着陆区”,用于单步执行,而“完整运行”模式则不需要。因此,我无意中掺入了该程序,从而掩盖了spim模拟器的错误。
当我恢复到您的确切程序时,便能够重现您的问题。如果文本段中的最后一条指令是单步执行中的非退出系统调用,这似乎spim
很奇怪。
nop
在您的syscall 11之后添加[even] a可解决此问题。
我都用过,但是我更喜欢mars
:http : //courses.missouristate.edu/KenVollmar/MARS/更好地组织了调试/单步,诊断消息,设置bkpt,数据视图-YMMV。
我以前已经下载并破解了两个模拟器的源代码。我一直在做一些清理工作,并添加了一些功能。我不是原始作者,但是我对代码有些熟悉。
我必须挂钩gdb
到spim
,看看发生了什么。但是,我已经可以说,步骤和在QtSpim中运行的代码路径有些不同
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句