2015-12-01 27 views
0

我寫彙編的一個小程序(MIPS)這裏我要讀11輛彩車,並將它們存儲在一個數組:MIPS:運行時異常:地址超出範圍

.include "../../ac1_macros.h" 
    .eqv size, 11 
    .data 
array: .float 0:size 
str1: .asciiz "Insert 11 numbers: " 

    .text 
    .globl main 
main: la $t0, array 
    print_str(str1) 
    li $t1, 1 
fill_array: 
    sll $t0, $t0, 2 
    read_float() 
    s.s $f0, ($t0) 
    addi $t1, $t1, 1 
    bne $t1, 11, fill_array 
    jr $ra 

我得到下面的異常插入第一個數字時。

在0x0040004c

運行時異常:地址超出範圍0x40040000

我在做什麼錯?是否與我沒有使用的指令align有關?提前致謝。

+0

順便說一句,「read_float」和「print_str」只是宏。他們以前工作過,所以我不認爲這是問題。 – JPC

回答

0

您轉移$t0並且不返回它,所以它會變得越來越大。

未經測試,請嘗試此操作。

.include "../../ac1_macros.h" 
    .eqv size, 11 
    .data 
array: .float 0:size 
str1: .asciiz "Insert 11 numbers: " 

    .text 
    .globl main 
main: la $t0, array 
    print_str(str1) 
    li $t1, 1 
fill_array: 
    read_float() 
    s.s $f0, ($t0) 
    addi $t1, $t1, 1 
    addi $t0, $t0, 4 # proceed to the next element 
    bne $t1, 11, fill_array 
    jr $ra 
+0

移位確實是個問題,但是你的代碼並沒有改進任何東西。首先,移位在這裏沒有任何意義:S – ElderBug

+0

@JPC Shift不應該在這裏使用。我更新了我的代碼,假設'float'長度爲4個字節。 – MikeCAT

+0

@MikeCAT它工作得很好!非常感謝!! – JPC