Как правильно загрузить код 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. во втором диалоговом окне говорится: обнаружены ошибки на первом проходе


person Community    schedule 05.04.2016    source источник
comment
это выдало мне ошибку в строке 2 Тогда вы должны указать точное сообщение об ошибке в своем вопросе.   -  person Michael    schedule 05.04.2016
comment
эта программа не загрузила код в свою среду, она выдала мне это сообщение в диалоге   -  person    schedule 05.04.2016
comment
Какое сообщение? Вам нужно будет дословно скопировать сообщение об ошибке, потому что вы не можете ожидать, что люди запустят какую-то программу и попробуют ее для вас.   -  person Peter Cordes    schedule 05.04.2016
comment
Я. Это довольно хромое сообщение об ошибке.   -  person Konrad Lindenbach    schedule 06.04.2016
comment
как решить проблему... Мне нужно проверить мой код, чтобы увидеть, правильно это или нет   -  person    schedule 06.04.2016
comment
Ссылки на размещенные вами изображения не работают. Избегайте изображений и помещайте точные сообщения об ошибках в виде текста в свой вопрос.   -  person Michael    schedule 06.04.2016


Ответы (1)


Ошибка предположительно связана с неверным адресом.

Вы пытаетесь сохранить двойное слово в строке 2:

sd $ra, 0($sp)

Но вы не передаете адрес, выровненный по двойному слову (кратный 8).

Поскольку вы храните двойные слова, каждое из них должно быть отделено друг от друга 8 байтами, и вы должны выделить 40 байта в стеке для 5 регистров, а не только 20:

addi.d $sp, $sp, -40
person Konrad Lindenbach    schedule 06.04.2016