![](/img/trans.png)
[英]Copying content of array to another array and printing in MIPS assembly
[英]MIPS assembly printing element of an array
.globl main
.data
array:
.asciiz "a"
.align 5
.asciiz "b"
.align 5
.asciiz "c"
.text
main:
# Loads address of array into $a0
la $t0, array
# Loads a[0]
lw $a0, 0($t0)
# Sets to print string
li $v0, 4
#prints the string
syscall
上面的MIPS匯編代碼給我錯誤:0x00400010的運行時異常:當我嘗試加載到$ a0中時,地址超出范圍0x00000061。 我也嘗試過在($ t0)旁邊使用32,但是似乎沒有什么讓我從數組中加載。
有什么想法嗎?
在lw
發生異常的可能性很小。 它最有可能在您執行syscall
時發生。
讓我們看看您的數據部分是什么樣的:
10010000: 61 00 00 00 00 00 ....
10010010: 00 00 00 ...
10010020: 62 00 00 ...
...
(以上數字均為十六進制)。
您對la $t0, array
所做的操作將$t0
設置$t0
la $t0, array
中第一個字節的地址,即$t0 = 0x10010000
。
lw $a0, 0($t0)
然后從該地址加載第一個字,即0x00000061。 然后,使用系統調用4傳遞0x00000061作為要打印的字符串的地址,這將導致異常。
我不太清楚你想做什么。 如果要打印“ a”,則應使用la $a0, array
。 如果希望array
包含字符串地址而不是字符串內容,則必須更改聲明數據的方式以反映該內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.