Versucht, schreiben Sie ein Programm, das druckt Primzahlen in MIPS Assembly language
Diesem Programm muss der Benutzer die Eingabe und drucken Sie die Menge der Primzahlen, so dass, wenn der Benutzer in puts "5" wird die Ausgabe "2,3,5,7,11"
Ich versuche es so:
boolean isPrime(int n) {
for(int i=2;i<n;i++) {
if(n%i==0)
return false;
}
return true;
}
Dies ist mein Assembler-code. Jetzt scheint es, nie verlassen die test_prime Verfahren.
.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"
addi $s2, $s2, 1 # $s2 = 1 (prime counter)
ist falsch. Wenn der Author ist der Meinung, es sollteaddi $s2, $zero, 1 # $s2 = 1 (prime counter)
.- Ich habe es geändert, aber das scheint nicht mein Problem. Wenn ich, $t2, $t4, und HI nur die Abwanderung, und die return-Anweisungen scheinen nie zu Reise
Du musst angemeldet sein, um einen Kommentar abzugeben.
das war das problem, Linie
Programm wurde behoben, durch das ändern, dass: