MIPS:使用sw将整数输入存储到内存中会导致地址超出范围错误

时间:2014-02-28 21:14:42

标签: arrays assembly stack mips

我试图使用堆栈将动态数组存储到程序中,首先读取输入n,然后使用[n]输入创建堆栈。但是,当我尝试存储单词时,会产生一个我不理解的错误。

.data                           
ask_for_size: .asciiz "\nInsert the array size\n"
ask_for_int: .asciiz "\nInput number\n"
input:  .space 16


.text 

Main:
  li    $v0,4
  la    $a0,ask_for_size
  syscall
  li    $v0,5
  la    $a0,input
  syscall
  add   $t0,$v0,$zero
  li    $sp,0x00001000  #stack pointer
  li    $s0,0x00001000  #base pointer
  la    $a0,ask_for_int

Loop1:
  li    $v0,4
  syscall
  li    $v0,5
  syscall
  sw    $v0,0($sp)

  addi  $sp,$sp,-4
  addi  $t0,$t0,-1
  bne   $t0,$zero,Loop1
  j Loop2

Loop2:

1 个答案:

答案 0 :(得分:1)

在sw $ v0进入之前,你不应该向$ sp添加-4吗?

addi  $sp,$sp,-4
sw    $v0,0($sp)

在我看来,此时你正在覆盖为你的流程分配的$ sp的结尾。


此外,您只需加载$ a0一次。你确定它没有被修改吗?否则,这可能会更好吗?

Loop1:
  li    $v0,4
  la    $a0,ask_for_int
  syscall
  ...