0

我尝试将以下代码加载到 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.第一个对话框说:pass 1 - error on line 2

2.第二个对话框说:第 1 遍检测到错误

4

1 回答 1

1

该错误可能是未对齐的地址。

您试图在第 2 行中存储一个双字:

sd $ra, 0($sp)

但是您没有传递一个双字对齐的地址(的倍数8)。

因为您要存储双字,所以它们应该是8分开的字节,并且您应该40在堆栈中为5寄存器分配字节,而不仅仅是20

addi.d $sp, $sp, -40
于 2016-04-06T00:17:08.797 回答