2012-02-14 44 views
0

任何想法爲什麼我收到對齊錯誤?執行la $t0, mainF時發生錯誤,即使類似的行la $t0, mainB執行得很好。這是我第一次在MIPS中編寫代碼,所以我做了一些研究,並且對地址對齊意味着什麼有一個模糊的概念,但編譯器甚至沒有在我將這個運行時異常拋出之前加入4的部分。讀取地址未在字邊界上對齊(MIPS)

.data 

mainF: 
    .byte 1 
mainB: 
    .byte 1 

mainN: 
    (has '.word's, generic tests for the program itself) 

newline: 
    .asciiz "\n" 
textFw: 
    .asciiz "The integers in order:\n" 
textBw: 
    .asciiz "The integers in backwards order:\n"   

.text   

main: 
    # Function prologue 
    addiu $sp, $sp, -24  # allocate stack space -- default of 24 here 
    sw  $fp, 0($sp)   # save caller's frame pointer 
    sw  $ra, 4($sp)   # save return address 
    addiu $fp, $sp, 20   # setup main's frame pointer 

    # Put mainF into $s0 
    la  $t0, mainF 
    lw  $s0, 0($t0) 

    # Put mainB into $s1 
    la  $t0, mainB 
    lw  $s1, 0($t0) 

     ... 
+0

抱着你的馬,我沒有意識到它沒有顯示行號。我指出了。更好?甚至解釋爲什麼它可能會拋出我的錯誤會有所幫助。 (這就是我爲什麼猶豫使用幫助論壇的原因,沒有人願意幫忙。) – Alyssa 2012-02-14 06:11:21

+0

好的,我重寫了你的問題,以演示如何寫它來使它很容易回答。 – Gabe 2012-02-14 06:23:40

回答

1

您有以下聲明:

mainF: 
    .byte 1 
mainB: 
    .byte 1 

假設mainF被分配的地址0mainB將獲得分配的地址1。由於地址1顯然不是字對齊的(即1不是4的倍數),試圖加載它將導致異常。

+1

MIPS字樣是4-sized(4的倍數) – gusbro 2012-02-14 14:15:24

+0

OHHH。 derpy derp!加載字節,不加載字。那麼這將有很大的意義。謝謝! – Alyssa 2012-02-14 21:04:00