Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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 如何从控制台读取int(mips-qtspim)?_Assembly_Mips - Fatal编程技术网

Assembly 如何从控制台读取int(mips-qtspim)?

Assembly 如何从控制台读取int(mips-qtspim)?,assembly,mips,Assembly,Mips,这是一个标准的斐波那契算法,要求在执行开始时输入。 当程序到达##########时,实际输入预计由用户给出分隔区域。 有人能解释一下为什么在v0中有4和5个负载? 这个输入读取实际上是如何工作的?与jester所说的li$v0.相同。。是简单的系统调用“函数”,使您能够打印到屏幕、读取输入、退出、暂停等。syscall指令调用操作系统,该操作系统查看$v0中的值以决定请求什么服务。查阅您的文档。 .data msg1:.asciiz "Give a number: " .text .g

这是一个标准的斐波那契算法,要求在执行开始时输入。 当程序到达##########时,实际输入预计由用户给出分隔区域。 有人能解释一下为什么在v0中有4和5个负载?
这个输入读取实际上是如何工作的?

与jester所说的li$v0.相同。。是简单的系统调用“函数”,使您能够打印到屏幕、读取输入、退出、暂停等。
syscall
指令调用操作系统,该操作系统查看
$v0
中的值以决定请求什么服务。查阅您的文档。
    .data
msg1:.asciiz "Give a number: "
.text
.globl main
main:
##############################
li $v0,4
la $a0,msg1
syscall #print msg
li $v0,5
syscall #read an int
add $a0,$v0,$zero #move to $a0
##############################
jal fib #call fib

add $a0,$v0,$zero
li $v0,1
syscall

li $v0,10
syscall

fib:
#a0=y
#if (y==0) return 0;
#if (y==1) return 1;
#return( fib(y-1)+fib(y-2) );

addi $sp,$sp,-12 #save in stack
sw $ra,0($sp)
sw $s0,4($sp)
sw $s1,8($sp)

add $s0,$a0,$zero

addi $t1,$zero,1
beq $s0,$zero,return0
beq $s0,$t1,return1

addi $a0,$s0,-1

jal fib

add $s1,$zero,$v0     #s1=fib(y-1)

addi $a0,$s0,-2

jal fib               #v0=fib(n-2)

add $v0,$v0,$s1       #v0=fib(n-2)+$s1
exitfib:

lw $ra,0($sp)       #read registers from stack
lw $s0,4($sp)
lw $s1,8($sp)
addi $sp,$sp,12       #bring back stack pointer
jr $ra

return1:
 li $v0,1
 j exitfib
return0 :     li $v0,0
 j exitfib