2015-12-01 30 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