[英]Trying to write a program that prints prime numbers in MIPS Assembly language
該程序需要用戶輸入並打印出該數量的質數,因此,如果用戶輸入“ 5”,它將輸出“ 2,3,5,7,11”
我正在嘗試這樣做:
boolean isPrime(int n) {
for(int i=2;i<n;i++) {
if(n%i==0)
return false;
}
return true;
}
這是我的匯編代碼。 現在看來,它永遠不會離開test_prime過程。
.globl main
.text
main:
li $v0, 4 # print welcome message
la $a0, welcome
syscall
la $a0, prompt # prompt for user input
syscall
#receive input
li $v0, 5
syscall
add $s1, $v0, $zero # $s1 = user input
beq $s1, $zero, quit # if input == zero, quit
#print 1st prime
li $v0, 1 # print int
addi $a0, $zero, 2 # argument = 2
syscall
li $v0, 4 # print new line
la $a0, line
syscall
addi $s2, $s2, 1 # $s2 = 1 (prime counter)
add $a2, $a0, $zero # $a2 = $a0
loop:
addi $a2, $a2, 1 # argument++
#beq $s2, $s1, quit # if prime counter == input, quit
jal test_prime
beq $v1, $zero, loop # if test_prime returns false, repeat
addi $s2, $s2, 1 # else $s2++
#print next prime
li $v0, 1 # print int
add $a0, $a2, $zero # argument = $a2
syscall
li $v0, 4 # print new line
la $a0, line
syscall
beq $s2, $s1, quit # if prime counter == input, quit
j loop
test_prime:
add $t1, $a2, $zero # $t1 = argument
addi $t2, $zero, 1 # $t2 = 1
loop2:
addi $t2, $t2, 1 # $t2++
beq $t2, $t1, true # if $t2 == $t1, return
div $t3, $t1, $t2 # $t3 = $t1 / $t2
mfhi $t4 # $t4 = remainder
beq $t4, $zero, false
j loop2
false:
li $v1, 0 # $v1 = false
jr $ra
true:
li $v1, 1 # $v1 = true
jr $ra
quit:
# program exit
li $v0, 10
syscall
.data
welcome: .asciiz "Prime Numbers\n"
prompt: .asciiz "How many primes? "
line: .asciiz "\n"
這是問題線
add $a2, $a0, $zero # $a2 = $a0
通過將程序更改為:
addi $a2, $zero, 2 # $a2 = 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.