我試過了QtSpim 9.1.16和9.1.17,它們都「剪切」輸入字符串的前2個字符,將它們設置爲0x0
,其他ASCII字符正確保存到緩衝區中。這是我的片段中,即使其他的代碼,我發現在互聯網上帶來同樣的結果:QtSpim在讀取字符串後切割2個字符
.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的一些信息嗎?
我無法重現您的問題[與9.1.17]。我做了代碼審查。我添加了一個系統調用4來回顯緩衝區,然後添加一個系統調用10來退出程序。除非你是單步執行,否則在你的系統調用11之後,你會「脫離世界的邊緣」(即執行什麼代碼?)。但是,在這裏,數據的回聲和十六進制轉儲符合預期的結果。 –
我實際上是單步走,這就是我們的老師建議我們做的。如果我讓程序正常運行,沒有什麼問題......哦,並且您爲系統調用10提示,我不知道它。 但你能解釋爲什麼單步會導致這種奇怪的行爲?例如,MARS是一個好人,不會行爲不端。 – LivingSilver94