簡體   English   中英

陣列的MIPS組件打印元件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM