我很乐意帮助解决以下问题。
我被要求实现函数is_cube,它接收n作为参数并在MIPS程序集中检查它是否是一个多维数据集。例如,8(2 ^ 3)和1000(10 ^ 3)是立方体。
我写了以下代码:
# UNTITLED PROGRAM
.data
str: .asciiz "Please enter your number >"
str1: .asciiz "The number is a cube"
str2: .asciiz "The number is not a cube"
.text
main:
li $v0 4
la $a0 str
syscall
li $v0 5
syscall
move $t0 , $v0
li $t1, 0
blt $t0, $zero, negative
negative:
sub $t5, $zero, 1
mul $t0, $t0, $t5
is_cube:
addi $t1, $t1, 1
sgt $t2, $t1, $t0
bne $t2, $zero, There_is_not
mul $t3, $t1, $t1
mul $t4 ,$t3, $t1
beq $t4, $t0, There_is
jal is_cube
There_is:
li $v0 4
la $a0 str1
syscall
jal end
There_is_not:
li $v0 4
la $a0 str2
syscall
jal end
end:
并且它可以正常工作,而不会在$s0
和所有这个过程中将$sp
保存在堆栈中。我的问题是:没有保存它可以吗?如果是的话,我什么时候应该使用它?
非常感谢。
答案 0 :(得分:1)
您尚未实现某项功能。您已经实现了一个循环,恰好使用jal
而不是普通的分支指令。执行从main开始,然后从negative
开始到从is_cube
开始的循环,然后当循环终止于There_is
或There_is_not
时,您使用jal end
而不是另一个分支指令。
此代码发生以处理MIPS,因为jal
指令不会将程序计数器的当前值推送到堆栈,与x86不同。
如果这是作业,在提交此代码之前,您应该回到有关在汇编程序中编写函数的注释。