spim模拟器 MIPS汇编实现冒泡算法

对代码的一些语法不清楚的可以看https://blog.csdn.net/qq_40570410/article/details/106903645

################################################
# # include <iostream>
# using namespace std;
# int main(void) {
#    int num;
#    cin >> num;
#    int* arr = new int[num];
#    for (int i = 0; i < num; i++) {
#        cin >> arr[i];
#    }
#    for (int i = 0; i < num-1; i++) {
#        for (int j = 0; j+1 < num-i; j++) {
#            if (arr[j] < arr[j+1]) {
#                int temp = arr[j];
#                arr[j] = arr[j+1];
#                arr[j+1] = temp;
#            }
#        }
#    }
#    for (int i = 0; i < num; i++) {
#        cout << arr[i] << " ";
#    }
#    return 0;
# }
##################################################

照葫芦画瓢

.data 
array: .space 1024 
input_num: .asciiz "enter the number of integer:\n"
input_int: .asciiz "enter the integer to be sorted:\n"
output_int: .asciiz "the sorted numbers are:\n"
seprate_flag: .asciiz " "

.text
	.globl main
main:
	la $a0, input_num   #print reminder of scanf
	li $v0, 4
	syscall
	
	li $v0, 5 		    #get the length of array
	syscall
	
	la $t6, array       #$t6 is array of first address
	move $t7, $zero		    #$t7 is i
	move $t8, $v0		#$t8 is the length of array
	move $t9, $zero			#$t9 is j
	
input:					#input array
	la $a0,input_int    #print hint
    li $v0,4
    syscall

    li $v0,5			#scanf
    syscall
						#visit array
    move $t0,$t7     
    mul $t0,$t0,4    
    addu $t1,$t0,$t6
    sw $v0,0($t1)

    addi $t7,$t7,1		#if $t7<$t8 goto input
    blt $t7,$t8,input
    move $t7,$zero  
	
loop1:
	move $t9, $zero     #j=0
loop2:
	#get a[i]
	move $t0, $t9
	mul $t0,$t0,4
	addu $t1,$t0,$t6
	lw $t2,0($t1)       #$t2=$t1=a[i]
	
	#get a[i+1]
	addi $t0, $t9, 1
	mul $t0,$t0,4
	addu $t4,$t0,$t6
	lw $t3,0($t4)		#$t3=$t4=a[i]

	bge $t2, $t3, skip  #if a[i]>a[i+1],goto skip
	sw $t3,0($t1)		#else swap
	sw $t2,0($t4)       
	
skip:
	addi $t9,$t9,1		#j++
	addi $t0,$t9,1		#if j+1 < num-i goto loop2
	sub $t1,$t8,$t7		
	blt $t0,$t1,loop2		
	addi $t7,$t7,1		#else i++,if i < num-1 goto loop1
	sub $t2,$t8,1		#else next run
	blt $t7,$t2,loop1

output:
						#print hint 
	la $a0,output_int
    li $v0,4
    syscall

    move $t7,$zero       #i=0

print:          
	#print the  element of array
	move $t0,$t7
	mul $t0,$t0,4
	addu $t1,$t0,$t6
	lw $a0,0($t1)
	li $v0,1
	syscall

	la $a0,seprate_flag      #print blank
	li $v0,4
	syscall

	addi $t7,$t7,1
	blt $t7,$t8,print    # if $t7<$t8 goto print

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值