Буду рад вашей помощи по следующей проблеме.
Меня попросили реализовать функцию 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
и всего этого процесса. Мой вопрос: это нормально, не сохраняя? и если да, то когда мне его использовать?
Большое спасибо.