我尝试过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的内容?
答案 0 :(得分:1)
根据我的热门评论,我添加了一个系统调用4以回显缓冲区内容,并添加了一个系统调用10来退出该程序。
spp可能很古怪(重新"从世界的边缘掉下来")。也就是说,如果程序没有正确终止。当我添加两个系统调用时,我给程序一个"软着陆区"单步,这是"完全运行"模式。因此,我无意中掺杂了该程序,掩盖了垃圾分析模拟器的错误。
当我恢复到完全计划时,我能够重现您的问题。似乎spim
做了奇怪的事情如果文本段中的最后一条指令是单步执行中的非退出系统调用。
在系统调用11修复问题后添加[偶数] nop
。
我已使用过两者,但我更喜欢mars
:http://courses.missouristate.edu/KenVollmar/MARS/对于调试/单步,诊断消息,设置bkpts,数据视图 - YMMV,它组织得更好。
我之前已经下载并将源代码攻击到两个模拟器。我一直在做一些清理并添加一些功能。我不是原作者,但我对代码有点熟悉。
我必须将gdb
与spim
联系起来,看看发生了什么。但是,我已经可以说QtSpim中的步骤与运行的代码路径有些不同