Mình không phải dân Kiến trúc máy tính, nhưng mình đang có rắc rối với bài tập với MIPS nhờ các bạn giúp đỡ.
Bài tập của mình làm chương trình nhập vào 1 số kiểm tra số đó có là số nguyên tố hay không. Mình không biết lỗi logic như thế nào mà giá trị mặc định truyền vào hàm is_prime trên MIPS nó không nhận. Bạn nào rành code MIPS không, có thể giúp mình sửa lại đoạn code MIPS với.
Mình cảm ơn trước! [IMG]images/smilies/smile.png[/IMG]

****************Code C:
‪#‎include‬<stdio.h>
#include<conio.h>
int snt(int n)
{
if(n<2)return 0;
for(int i=2;i<n;i++)
if(n%i==0)
return 0;
return 1;
}
void main()
{
int n;
printf("Nhap n: ");
scanf("%d",&n);
if(snt(n) == 1)
printf("Day la so nguyen to");
else
printf("Day khong phai la so nguyen to");
}

************ Code MIPS
.data
.globl output1
.globl output2
input: .asciiz "
Nhap n: "
output1: .asciiz " is a prime
"
output2: .asciiz " is not a prime
"
################# code segment #####################
.text
############ main ################
.globl main
main:
la $a0, input # nhập n
addi $v0, $zero, 4
syscall
addi $v0, $zero, 5
syscall
move $t0, $v0
add $a0, $zero, $s2 # nếu n là số nguyên tố
jal is_prime
bne $v0, $zero, else # nếu n không là số nguyên tố
addi $s2, $s2, 1
j endif #
li $v0, 1 # xuất chuỗi "n "
syscall
li $v0, 4 # xuất ra " is a prime
"
la $a0, output1
syscall
else:
addi $s2, $s2, 1
li $v0, 1 # xuất chuỗi "n "
syscall
li $v0, 4 # xuất ra chuỗi " is not a prime
"
la $a0, output2
syscall
endif:
############### check prime ##################
.globl is_prime
is_prime:
addi $t0, $zero, 2 # khởi tạo x = 2
is_prime_test:
slt $t1, $t0, $a0 # nếu (x > num)
bne $t1, $zero, is_prime_loop
addi $v0, $zero, 1 # là số nguyên tố
jr $ra # trả về 1
is_prime_loop: # ngược lại, kiểm tra số vừa nhập
div $a0, $t0
mfhi $t3 # c = (num % x)
slti $t4, $t3, 1
beq $t4, $zero, endcheck # nếu phép chia lấy dư (c == 0)
add $v0, $zero, $zero # nó ko phải là số nguyên tố
jr $ra # trả về 0
endcheck: