2017-07-18 15 views
1

整数入力のバイナリ数字を出力し、最後のインデックスから配列に格納しようとしています。それから私は配列からそれを印刷しようとしています。エラー:ランタイム例外...ワード境界に整列していないストアアドレス

.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 

あなたはswarrayに保管しているので、私は

line 99: Runtime exception at 0x004000d8: store address not aligned on word boundary 0x100100ab

+0

(テストプログラムが実行されるとき、それはある)$t5は4で割り切れる必要があることに注意してください行99のエラーsw $ t4、配列($ t5)#最初の配列+ 60行99の行の最終位置:ランタイム例外0x004000d8:ストアアドレスが整列していないon word boundary 0x100100ab – Rahul

+0

私はMIPSプログラマではありませんが、 'array'の定義の前に' .align'(正確な言い方ではないかもしれません)ディレクティブが必要だと思っています。それらの '.asciiz'はどの整列でも終了することができます。または、おそらく位置合わせが保証される.dataセクションの先頭に移動します。 – jasonharper

答えて

0

を言い、アレイ内のエラー行99 SW $ t4の上、配列($ T5)#first時間アレー+ 60の最後の位置を取得していますarrayは4バイト境界でなければなりません。これは、mipsアーキテクチャの制限です。同様にlwの場合。

ので、変更:

array: .space 64 

の中へ:また

.align 4 
array: .space 64 

、私は取得しています

関連する問題