MIPS 中的 While 循环(MIPS 初学者)
While loop in MIPS (Beginner in MIPS)
我正在尝试编写一个程序来计算 nCr,其中 n 和 r 由用户输入。
我的方法如下:
我要求用户输入 n 的值。
然后我要求用户输入 r 的值。
然后我计算n-r的值
然后用三个while循环计算n的值! r!和 (n-r)!
那我除以n!通过 r!和 (n-r)!
然后我展示给用户。
以下是我的代码:
.data
prompt1: .asciiz "Enter the value of n:\n"
prompt2: .asciiz "Enter the value of r:\n"
message: .asciiz "The value of nCr is: "
.text
#Prompt the user to enter value of n
li $v0,4
la $a0,prompt1
syscall
#Get the value of n
li $v0,5
syscall
#Store the value of n in $t0
move $t0,$v0
#Prompt the user to enter value of r
li $v0,4
la $a0,prompt1
syscall
#Get the value of r
li $v0,5
syscall
#Store the value of r in $t2
move $t2,$v0
#Getting the value of (n-r)
sub $t4,$t0,$t2
#Calculating value of n!
addi $t1,$zero,1
while:
blt $t0,1,exit
mul $t1,$t1,$t0
sub $t0,$t0,1
j while
exit:
li $v0,10
syscall
#Calculating the value of r!
addi $t3,$zero,1
while:
blt $t2,1,exit
mul $t3,$t3,$t2
sub $t2,$t2,1
j while
exit:
li $v0,10
syscall
#Calculating the value of (n-r)!
addi $t5,$zero,1
while:
blt $t4,1,exit
mul $t5,$t5,$t4
sub $t4,$t4,1
j while
exit:
li $v0,10
syscall
#Getting the final value
div $s0,$t1,$t3
div $s1,$s0,$t5
#Displaying the message
li $v0,4
la $a0,message
syscall
#Display the answer
addi $a0,$s1,0
syscall
我得到的错误是这样的:
- 第 46 行第 6 列:标签“while”已经定义。
- 第 46 行第 6 列:标签“退出”已定义。
我在这里做错了什么?在mips
中使用三个while循环是不是正确的方法
如果您在程序中编写 while:
,您将创建一个名为 while
的标签,这是您放置它的行号的别名。在一个文件中,您只能创建一个具有特定名称的标签。
您的问题的解决方案是将标签命名为 while1
、while2
和 while3
。同样适用于您的 exit
标签。
我正在尝试编写一个程序来计算 nCr,其中 n 和 r 由用户输入。 我的方法如下:
我要求用户输入 n 的值。
然后我要求用户输入 r 的值。
然后我计算n-r的值
然后用三个while循环计算n的值! r!和 (n-r)!
那我除以n!通过 r!和 (n-r)!
然后我展示给用户。
以下是我的代码:
.data prompt1: .asciiz "Enter the value of n:\n" prompt2: .asciiz "Enter the value of r:\n" message: .asciiz "The value of nCr is: " .text #Prompt the user to enter value of n li $v0,4 la $a0,prompt1 syscall #Get the value of n li $v0,5 syscall #Store the value of n in $t0 move $t0,$v0 #Prompt the user to enter value of r li $v0,4 la $a0,prompt1 syscall #Get the value of r li $v0,5 syscall #Store the value of r in $t2 move $t2,$v0 #Getting the value of (n-r) sub $t4,$t0,$t2 #Calculating value of n! addi $t1,$zero,1 while: blt $t0,1,exit mul $t1,$t1,$t0 sub $t0,$t0,1 j while exit: li $v0,10 syscall #Calculating the value of r! addi $t3,$zero,1 while: blt $t2,1,exit mul $t3,$t3,$t2 sub $t2,$t2,1 j while exit: li $v0,10 syscall #Calculating the value of (n-r)! addi $t5,$zero,1 while: blt $t4,1,exit mul $t5,$t5,$t4 sub $t4,$t4,1 j while exit: li $v0,10 syscall #Getting the final value div $s0,$t1,$t3 div $s1,$s0,$t5 #Displaying the message li $v0,4 la $a0,message syscall #Display the answer addi $a0,$s1,0 syscall
我得到的错误是这样的:
- 第 46 行第 6 列:标签“while”已经定义。
- 第 46 行第 6 列:标签“退出”已定义。
我在这里做错了什么?在mips
中使用三个while循环是不是正确的方法如果您在程序中编写 while:
,您将创建一个名为 while
的标签,这是您放置它的行号的别名。在一个文件中,您只能创建一个具有特定名称的标签。
您的问题的解决方案是将标签命名为 while1
、while2
和 while3
。同样适用于您的 exit
标签。