【问题标题】:Error: Runtime exception ... store address not aligned on word boundary错误:运行时异常...存储地址未在字边界上对齐
【发布时间】:2017-07-18 18:23:44
【问题描述】:

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

    .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,array($t5) #first time array+60 last location in array 上遇到错误

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

【问题讨论】:

  • 我在第 99 行遇到错误 sw $t4,array($t5) #first time array+60 last location in array 表示第 99 行:0x004000d8 处的运行时异常:存储地址未对齐字边界 0x100100ab
  • 我不是 MIPS 程序员,但我怀疑您只需要在 array 的定义之前添加一个 .align(可能不是确切的措辞)指令,以确保它开始一个 4 字节的边界 - 在它可以以任何对齐方式结束之前的那些 .asciizs。或者,将其移至 .data 部分的顶部,这样可以保证对齐。

标签: assembly mips


【解决方案1】:

因为您使用sw 存储到array,所以array 必须是4 字节对齐的。这是 mips 架构的限制。 lw 也是如此。

所以,改变:

array: .space 64

进入:

    .align 4
array: .space 64

另外,请注意$t5 应该能被 4 整除(即在您的测试程序运行时)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2017-06-25
  • 2014-05-27
  • 2012-03-05
  • 2016-08-06
相关资源
最近更新 更多