将以下函数翻译成c++语言CreatePrimes: la $a1,prime #把数组首地址存放到a1 li $t7,3 #数组第一个数设置为3 sh $t7,0($a1) #半字存储 addi $a1,$a1,2 #地址偏移加2 li $t1,5 #定义变量i,赋初值5 li $t2,1 #定义变量j,赋初值1 li $t3,65536 #初始化循环计数 loop: #外层循环 li $t4,3 #定义变量k loop2: #内层循环 divu $t1,$t4 #判断能否整除 mfhi $t0 #将余数移入 beqz $t0,loop3 #第一个if判断 mul $t5,$t4,$t4 #计算循环计数k*k,存入t5 addi $t4,$t4,2 #变量k累计加2 ble $t5,$t1,loop2 #判断k*k是否小于等于i loop3: move $t7,$t4 #这里注意要重新设置一个判断数,因为t5里的值可能用不到 mul $t8,$t7,$t7 #相当与k*k ble $t8,$t1,else #第二个if判断??? sh $t1,0($a1) #半字存入 addi $t2,$t2,1 #个数累加 addi $a1,$a1,2 #地址累加 else: addi $t1,$t1,2 blt $t1,65536,loop print: subi $t1,$t2,10 #设置循环变量 la $t3,prime #将数组地址赋值给t3 mul $t7,$t1,2 #因为以2字节存储,所以要将个数存入 add $t3,$t3,$t7 #地址量偏移 li $v0,1 move $a0,$t2 #打印素数个数 syscall li $v0,4 #打印提示字符串 la $a0,out_1 syscall loop4: li $v0,1 #调用打印整数的系统接口 lhu $a0,($t3) #将指针所指向的数移入$a0 syscall li $v0,4 #调用打印字符串的系统接口 la $a0,nps syscall addi $t1,$t1,1 #个数递增1 addi $t3,$t3,2 #地址递增2 blt $t1,$t2,loop4 #如果小于的话继续循环 li $v0,4 #打印字符串 la $a0,table syscall move $a0,$t2 #将素数个数通过寄存器$a0返回 jr $ra #返回主函数
时间: 2023-06-26 18:05:35 浏览: 86
void CreatePrimes(int* prime) {
int t7 = 3;
*(prime) = t7;
prime += 1;
int t1 = 5;
int t2 = 1;
int t3 = 65536;
for (int i = 0; i < t3; i++) {
int t4 = 3;
while (true) {
int t0;
divu(t1, t4);
mfhi(t0);
if (t0 == 0) {
break;
}
int t5 = t4 * t4;
t4 += 2;
if (t5 > t1) {
goto ELSE;
}
}
int t7 = t4;
while (true) {
int t8 = t7 * t7;
if (t8 > t1) {
break;
}
*(prime) = t1;
t2 += 1;
prime += 1;
goto AFTER_ELSE;
ELSE:
t1 += 2;
AFTER_ELSE:;
}
}
int t1 = t2 - 10;
prime = prime - t2 * 2 + t1 * 2;
cout << t2 << endl;
cout << "Prime Numbers: " << endl;
for (int i = 0; i < t1; i++) {
cout << *(prime) << " ";
prime += 1;
}
cout << endl;
}
阅读全文