Как правильно загрузить код MIPS в winMIPS64
Я попытался загрузить следующий код в winMIOS64, но этот процесс не удался, потому что он выдал ошибку в строке 2, мог бы помочь мне определить проблему и, если есть другие инструкции, должны быть изменены??!!
.data
m1:.asciiz "enter the total number of digits"
m2:.asciiz "enter total number of digits"
m3:.asciiz "entered number:"
m4:.asciiz "sum of product:"
m5:.asciiz "not an armstrong number"
.text
main:
addi.d $sp,$sp,-20
sd $ra,0($sp)
sd $a0,4($sp)
sd $a1,8($sp)
sd $a2,12($sp)
sd $a3,16($sp)
jal start
start: ld $a0,0($sp) #restore a0 from stack
ld $a1,4($sp)
ld $a2,8($sp)
ld $a3,12($sp)
ld $ra,16($sp)
addi.d $sp,$sp,20 #restore stack pointer
jr $ra #return to calling routing
halt
Ниже приведены ошибки, появившиеся в диалоговом окне, пока код не загружен:
1. в первом диалоге сказано: пропустить 1 - ошибка в строке 2
2. во втором диалоге сказано: ошибки обнаружены на проходе 1
1 ответ
Решение
Ошибка предположительно смещена по адресу.
Вы пытаетесь сохранить двойное слово в строке 2:
sd $ra, 0($sp)
Но вы не передаете адрес, который выровнен по двойному слову (кратно 8
).
Поскольку вы храните двойные слова, каждое из них должно быть 8
байт друг от друга, и вы должны выделить 40
байтов в стеке для 5
регистрирует вместо просто 20
:
addi.d $sp, $sp, -40