我做了一個項目在MPS模擬器在火星模擬器和我的程序掛在系統調用由於奇怪的行爲。不正確加載的值從內存註冊到mips
我想存儲給定的字符緩衝區文件並傳遞給系統調用適當的長度。
.data
line_length: .space 4
# ...
.text
# ...
lb $t0, line_length
li $v0, 15
lb $a0, io_descriptors+4
la $a1, output_line
move $a2, $t0
syscall
存儲在line_length中的值是0x80。在lb指令之前和之後,情況確實如此。雖然lb之後$ t0的值是0xffffff80,這是出於我理解之外的原因。由於數字是負數,系統調用失敗。可能是$ t0不存儲0x80值的原因是什麼?我該如何解決它?
這已經有一段時間,因爲我與MIPS的工作,但我認爲,這是怎麼回事是字節值0x80表示被簽名擴展到32位。即它是一個有符號的字節加載。 0x80是8位二進制補碼值-128。 MSB是1,所以是負數。 – Kaz