在字符串读取后,QtSpim会删除2个初始字符

时间:2016-06-10 19:35:41

标签: mips qtspim

我尝试过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的内容?

1 个答案:

答案 0 :(得分:1)

根据我的热门评论,我添加了一个系统调用4以回显缓冲区内容,并添加了一个系统调用10来退出该程序。

spp可能很古怪(重新"从世界的边缘掉下来")。也就是说,如果程序没有正确终止。

当我添加两个系统调用时,我给程序一个"软着陆区"单步,这是"完全运行"模式。因此,我无意中掺杂了该程序,掩盖了垃圾分析模拟器的错误。

当我恢复到完全计划时,我能够重现您的问题。似乎spim做了奇怪的事情如果文本段中的最后一条指令是单步执行中的非退出系统调用。

在系统调用11修复问题后添加[偶数] nop

我已使用过两者,但我更喜欢marshttp://courses.missouristate.edu/KenVollmar/MARS/对于调试/单步,诊断消息,设置bkpts,数据视图 - YMMV,它组织得更好。

我之前已经下载并将源代码攻击到两个模拟器。我一直在做一些清理并添加一些功能。我不是原作者,但我对代码有点熟悉。

我必须将gdbspim联系起来,看看发生了什么。但是,我已经可以说QtSpim中的步骤与运行的代码路径有些不同