如何在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
我尝试将以下代码加载到 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