5
我正在使用類似SPIMS或MARS的系統調用函數。訪問字符串中的一個字符
我讀的字符串(和它的作品,因爲我可以把它打印出來)如下:
li $v0, 8
la $a0, string
li $a1, 256
syscall
不過,我在訪問字符串的單個字符的問題。所以,如果我要訪問的第一個字符,打印出來,我想這一點:
la $t0, string
lb $a0, ($t0)
li $v0, 4
sys call
如果我嘗試這樣:
la $a0, string
li $v0, 4
syscall
這樣就會打印出整個字符串作爲字符串指向整個字符串。
如果我嘗試類似:
la $a0, string
lb $a0, ($t0)
li $v0, 4
syscall
它給了我一個出界錯誤。我不明白爲什麼 - 字符不是一個字節長,這只是將字符串的第一個字節加載到$ a0中?
謝謝
IMO你應該總是重置寄存器值執行LI之前。你永遠不知道上半部分可能有什麼。 – m0skit0
'LI'是一個僞操作,彙編程序通常擴展爲'ORI $ rd,$ zero,low16bits',接着是'LUI $ rd,hi16bits'。在LI指令之後,目標寄存器的全部32位被正確設置,因此在LI之前不需要手動復位寄存器。 – markgz
你絕對是對的 – m0skit0