错误:运行时异常...商店地址未在字边界

时间:2017-07-18 18:23:44

标签: assembly mips

我正在尝试打印任何整数输入的二进制数字,并将它们存储在从最后一个索引开始的数组中。然后我试图从数组中打印出来。

    .data

prompt: .asciiz "Enter an int: "
errorLarge: .asciiz "Error Value to large CANNOT be held in 16 bit"
errorSmall: .asciiz "Error Value is to small CANNOT be held in 16 bits"

# 64bytes =512 bits created (1 int =4 bytes):: (16 int =64 bytes)
array: .space 64

newLine: .asciiz "\n"

    .globl main
    .text

main:
    li $v0,4
    la $a0,prompt
    syscall

    li $v0,5
    syscall
    move $t0,$v0

    li $t1,32767
    li $t2,-32767

    bgt $t0,$t1,InputToGreat
    blt $t0,$t2,InputToSmall

    li $t2,2
    li $t5,64     # last memory location in array+1

    li $t7,0

    j initializer

InputToGreat:

    li $v0,4
    la $a0,errorLarge
    syscall

    j main

InputToSmall:

    li $v0,4
    la $a0,errorSmall
    syscall

    j main

finalizer:

    subi $t5,$t5,4
    sw  $t4,array($t5)

    li $t4,0

    bne $t5,$zero, finalizer

OutPut:

    lw $t6,array($t7)

    li $v0,1
    move $a0,$t6
    syscall

    addi $t7,$t7,4
    bne  $t7,252,OutPut

    li $v0,10
    syscall

initializer:

    div    $t0,$t2  # (inside house) 1) 12/2  2) 6/2   3) 3/2
    mflo   $t0  #quotient       6        3        1
    mfhi   $t4  #rem                0        0        1

    beq    $t4,1,finalizer

InputToArray:

    subi $t5,$t5,4
    sw  $t4,array($t5) #first time array+60 last location in array

    li $v0,1
    move $a0,$t4
    syscall

    j initializer

我在99行sw $ t4上遇到错误,数组($ t5)#first time array + 60数组中的最后一个位置

  

第99行:0x004000d8处的运行时异常:存储地址未在字边界0x100100ab上对齐

1 个答案:

答案 0 :(得分:0)

由于您使用array存储到swarray必须与4字节对齐。这是对mips架构的限制。同样适用于lw

所以,改变:

array: .space 64

分为:

    .align 4
array: .space 64

另请注意,$t5应该可以被4整除(在测试程序运行时就是这样)