Assembly MIPS中的过程和系统调用
这个程序要求用户输入一个整数,然后跳转到check511标签。在那里,它检查给定的数字是大于还是小于511 如果大于511,则返回1,否则返回0 然后返回打印标签并给出结果。我使用了两个寄存器$v0和$v1来实现这一点 我想知道,有没有办法只用$v0就可以完成Assembly MIPS中的过程和系统调用,assembly,mips,system-calls,procedures,mips32,Assembly,Mips,System Calls,Procedures,Mips32,这个程序要求用户输入一个整数,然后跳转到check511标签。在那里,它检查给定的数字是大于还是小于511 如果大于511,则返回1,否则返回0 然后返回打印标签并给出结果。我使用了两个寄存器$v0和$v1来实现这一点 我想知道,有没有办法只用$v0就可以完成 当然,将函数返回值暂时保存在堆栈上。这是否更好取决于您的决定。检查SLTIU,然后用1检查xor结果。您应该使用jr$ra而不是j Print来从函数返回。@markgz是的,我认为使用$ra更有效,它与j Print一起工作也很好,所以
当然,将函数返回值暂时保存在堆栈上。这是否更好取决于您的决定。检查SLTIU,然后用1检查xor结果。您应该使用jr$ra而不是j Print来从函数返回。@markgz是的,我认为使用$ra更有效,它与j Print一起工作也很好,所以我没有更改它
.data
prompt: .asciiz "Enter a Integer\n"
result: .asciiz "The result is "
.text
.globl main
main:
# prompt the user for Integer
li $v0, 4
la $a0, prompt
syscall
# getting integer from the user
li $v0, 5
syscall
add $a0, $v0, $zero #putting the input in $a
jal check511 #jump to procedure check511
Print:
#print result statement
li $v0, 4
la $a0, result
syscall
# Print answer
li $v0, 1
addi $a0, $v1, 0
syscall
#exit program
li $v0, 10
syscall
check511:
bgt $a0, 511, Else #branch to else is > 511
addi $v1, $zero, 0
j Print
Else:
addi $v1, $zero, 1
j Print