0

このコードは、2つの数値のLCMを見つけるために作成しました。問題を抱えているのは開始チャンクです。問題を見つけようとしましたが、理解できませんでした。ワードをロードまたはワードを保存しようとすると、アドレスが整列されていないというエラーやその他の例外が発生します。コードは次のとおりです。

.data

user: .asciiz "enter first number\n"
user2: .asciiz "enter second number\n"

array1: .space 500
array2: .space 500
array3: .space 500

.text

main:

la $a0,user
li $v0,4
syscall

li $v0,5
syscall

move $s0,$v0

la $a0,user2
li $v0,4
syscall

li $v0,5
syscall

move $s1,$v0

li $t0,0
li $t1,0
li $t2,2    
li $t3,3
li $t4,0
li $t5,5
li $t6,7
li $t7,0
li $t8,0
li $t9,0
li $s8,0

la $t8,array1
la $t9,array2

j Loop1



Loop1:

div $s0,$t2

mflo $s2
mfhi $s3 # remainder

beq $s2,1,Loop2

xor $s5,$s3,$0

beq $s5,1,Odd3

add $t4,$t7,$t8

sw $t2,0($t4)  # error

addi $t7,$t7,4


j Loop1

よろしく

4

1 に答える 1

1

整列されていないアドレスについて不平を言う場合は、整列されていない理由を調べる必要があります。アセンブラーは通常、適切にデータを整列するのに十分なほどスマートですが.space、型 (したがって整列) 情報を持たないディレクティブを使用しています。偶然にも、文字列によって配列が整列されなくなります。.align 2の前にディレクティブを手動で追加することで、これを修正できますarray1

于 2012-11-25T15:07:42.943 に答える