Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MIPS中的过程和系统调用_Assembly_Mips_System Calls_Procedures_Mips32 - Fatal编程技术网

Assembly MIPS中的过程和系统调用

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一起工作也很好,所以

这个程序要求用户输入一个整数,然后跳转到check511标签。在那里,它检查给定的数字是大于还是小于511

如果大于511,则返回1,否则返回0

然后返回打印标签并给出结果。我使用了两个寄存器$v0和$v1来实现这一点

我想知道,有没有办法只用$v0就可以完成


当然,将函数返回值暂时保存在堆栈上。这是否更好取决于您的决定。检查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