MIPS:运行时异常:地址超出范围

时间:2015-12-01 15:49:51

标签: assembly mips

我在汇编(MIPS)中编写一个小程序,我必须读取11个浮点数并将它们存储在一个数组中:

    .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有关吗?提前谢谢。

1 个答案:

答案 0 :(得分: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