#include<stdio.h>
int main() {
int a[10];
int i, j, k;
for (i = 0;i < 10; i++){
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
if (a[i] < a[j]) {
k = a[i];
a[i] = a[j];
a[j] = k;
}
for (i = 0;i < 10; i++){
printf("%d ", a[i]);
}
return 0;
}
这是用C写的选择排序,我想将它转换成MIPS汇编语言
下面是我写的MIPS汇编代码
.text
.globl main
main:
la $a0,inputNumbers
li $v0,4
syscall
la $t9,array #t9为数组首地址
addi $t8,$zero,10 #$t8为数组的长度 10 a[10]
move $t0,$zero #$t0为变量i int i = 0
input:
li $v0,5 #从键盘读取一个数 读取整型赋值给$v0
syscall
move $t7,$t0 #访问数组第一个元素
mul $t7,$t7,4 #数组元素所占字节数*循环变量+数组的起始地址=数组[循环变量]
addu $t6,$t7,$t9 #无符号数相加 将a[i]第一个值存到$6
sw $v0,0($t6) #把一个字的数据从寄存器存到存储器 地址偏移量为0
addi $t0,$t0,1 # i++
blt $t0,$t8,input # i < 10 循环
move $t0,$zero #循环完成后置 i = 0
addu $t1,$t0,1
loop1:
move $t7,$t1
mul $t7,$t7,4
addu $t5,$t7,$t9 #a[j]第一个值存储到$5
lw $t3,0($t5) #获取a[j]
lw $t2,0($t6) #获取a[i]
blt $t2,$t3,jump #a[i] < a[j]
addi $t1,$t1,1 # 不满足 j++
blt $t1,$t8,loop1 #j < 10 继续循环
jump:
sw $t3,0($t6)
sw $t2,0($t5) #交换a[i]与a[i]的值
blt $t1,$t8,loop1 #j < 10 继续循环
loop2:
addi $t0,$t0,1
addi $1,$0,1 #每次循环都做j = i + 1
blt $t0,$t8,loop1
output:
la $a0,aftersort
li $v0,4
syscall
move $t0,$zero
print:
move $t7,$t0
mul $t7,$t7,4
addu $t6,$t7,$t9
lw $a0,0($t6)
li $v0,1
syscall
la $a0,end
li $v0,4
syscall
addi $t0,$t0,1
blt $t0,$t8,print
li $v0,10
syscall
但是结果输入什么值,输出的还是什么值,没有变化,这是为什么
求解答 谢谢!!
我自己已经解决了 谢谢