Адрес хранилища ошибок не выровнен по границе слова
Я впервые пользуюсь MIPS MARS и получаю эту ошибку:
Error line 19: Runtime exception at 0x00400024: store address not aligned on word boundary 0x00000002
Это код, который я использую:
.data
str: .ascii "abcdefgh"
array: .space 20
.text
main:
li $s0, 1 # a = 1
li $s2, 1 # b = 1
loop:
la $t1, array
slti $t0, $s0, 3 # t0<- 1 if a < 3
beq $t0, $zero, exit
sll $t0, $s0, 2 # t1<- 4*a
add $t1, $t1, $t0 # new base addr
add $t2, $s2, $s0 # t2<- a+b
sw $t1, 0($t2) # D[a]=a+b
addi $s0, $s0, 1 # a = a +1
j loop # goes to loop: label
exit:
li $v0, 10 # v0<- (exit)
syscall
Может кто-нибудь объяснить, почему это происходит?
Обновленный код:
.data
str: .ascii "abcdefgh"
array: .space 20
.text
main:
li $s0, 1 # a = 1
li $s2, 1 # b = 1
loop:
la $t1, array
slti $t0, $s0, 3 # t0<- 1 if a < 3
beq $t0, $zero, exit
sll $t0, $s0, 2 # t1<- 4*a
add $t1, $t1, $t0 # new base addr
add $t2, $s2, $s0 # t2<- a+b
sw $t1, 2($t2) # D[a]=a+b
addi $s0, $s0, 1 # a = a +1
j loop # goes to loop: label
exit:
li $v0, 10 # v0<- (exit)
syscall
но теперь я получаю эту ошибку:
line 19: Runtime exception at 0x00400024: address out of range 0x00000004
Как я могу это исправить?
1 ответ
Слова должны быть расположены по адресам, кратным 4; вы используете один (0x00000002
) который не.