在MIPS程序集中访问数组时出错

时间:2012-11-25 10:52:53

标签: arrays assembly mips

我制作了这个代码,用于查找两个数字的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

此致

1 个答案:

答案 0 :(得分:1)

如果它抱怨未对齐的地址,那么你应该去看看为什么它没有对齐。汇编程序通常足够聪明,可以根据需要对齐数据,但是您使用的.space指令没有任何类型(因此对齐)信息。很可能你的字符串使数组不对齐。您可以通过在.align 2之前手动添加array1指令来解决此问题。