Как правильно загрузить код 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
Другие вопросы по тегам