Хотя я пытался ввести другое значение, но Qtspim по-прежнему распечатывает значение «0», и ввод также не сохраняется в регистре, я пытаюсь найти ответ в Интернете, но похоже, что никто не сталкивался с этой проблемой Я работаю с ним 4 часа, ЧУВСТВУЮ, что это меня очень расстраивает. вот мой код, я пытаюсь определить, является ли ввод простым числом или нет.
# Power program
# ----------------------------------
# Data Segment
.data
request: .asciiz "Enter an integer:"
Yes: .asciiz " is a prime number.\n"
No: .asciiz " is not a prime number\n."
End: .asciiz"End!\n"
Key: .word -1
One: .word 1
# ----------------------------------
# Text/Code Segment
.text
.globl main
main:
lw $t1,One
add $s2,$zero,$zero
lw $s3,One
lw $s0,Key
add $s5,$zero,$zero
j power # call the function power
li $v0, 10 # call code for exit
syscall # system call
.end main
.globl power
power:
j power_loop
power_loop:
la $a0, request # load string request in memory to $a0
li $v0, 4 # print out the string
syscall #prevent Memory address out of bounds
li $v0, 5
syscall
move $s7,$v0
beq $s7, $s0, exit_L #when input =-1 exit
j Prime #otherwise go to define the input whether prime num
Prime:
beq $s7,$t1,result
div $s7,$t1
mthi $t4
beq $t4,$zero,count
addi $t1,$t1,1
j Prime
count: #counting the number of factors
addi $s2,1
addi $t1,$t1,1
result: addi $t1,$zero,1
bne $s2,$s3,resultNo
beq $s2,$s3,resultYes
resultYes: li $v0,1
move $a0,$s7
syscall
add $s2,$zero,$zero
la $a0,Yes
li $v0,4
syscall
j power_loop
resultNo: li $v0,1
move $a0,$s7
syscall
add $s2,$zero,$zero
la $a0,No
li $v0,4
syscall
j power_loop
exit_L:
la $a0,End
li $v0,4
syscall
jr $ra
.end power
хотя я изменил mthi на mfhi, результат все тот же, что и в прошлом, что бы я ни вводил, он просто представляет 0 - это простое число в консоли, как я могу это исправить?
похоже, что программа делает мой ввод равным 0
Я не могу воспроизвести описанное вами поведение. Однако, очевидно, что
mthi $t4
является ошибкой (должен бытьmfhi $t4
). И способ подсчета количества чисел, на которые делится$s7
, нарушен; на самой первой итерации вы выйдете из цикла, потому что все, что делится на 1, имеет остаток 0. Используйте функции отладки в симуляторе, чтобы проверить поведение вашей программы во время выполнения.