如何在winMIPS64中正确加载MIPS代码

How to load MIPS code correctly in 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 遍检测到错误

错误可能是地址未对齐。

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

sd $ra, 0($sp)

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

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

addi.d $sp, $sp, -40