利用MIPS CPU实现冒泡排序和选择排序法

冒泡排序法

#################################################################################
#本程序实现(字节地址0x200,字地址0x80)开始的8个字单元的降序排序#
#################################################################################
.text


#利用循环进行赋值
addi $t0,$0,8  #循环8次
addi $s0,$0,-1 #从-1开始赋值
add $s1,$0,$0  #数组下标
sort_init:
    sw $s0,512($s1)
    addi $s0,$s0,1
    addi $s1,$s1,4
    addi $t0,$t0,-1
    bne $t0,$0,sort_init  

#利用冒泡法进行排序
addi $t0,$0,28 #外循环次数
sort_loop:    #外循环
    
addi $t1,$0,0 #内循环前下标初始值
addi $t2,$0,4 #内循环后下标初始值

sort_inside:  #内循环

lw $s3,512($t1)     #$s3=[t1]
lw $s4,512($t2)     #$s4=[t2]
slt $s0,$s3,$s4     #R[$rd]←R[$rs]<R[$rt] 小于置1,有符号比较
beq $s0,$0,sort_next  
sw $s3, 512($t2)
sw $s4, 512($t1)   

sort_next:
addi $t1,$t1,4
addi $t2,$t2,4
bne $t1,$t0,sort_inside  

addi $t0,$t0,-4
bne $t0,$0,sort_loop   

addi   $v0,$zero,10         # system call for exit
syscall                  # we are out of here.   

在这里插入图片描述
运行结果
在这里插入图片描述
运行打开存储器发现是相邻元素进行比较,小的数往后冒泡。

实验包自带的程序是选择法,是按照一位不动,依次和剩下的比较运行的

 .text
#################################################################################
#本程序实现(字节地址0x200,字地址0x80)开始的8个字单元的降序排序,此程序可在mars mips仿真器中运行,运行时请将Mars Setting中的Memory Configuration设置为Compact,data at address 0
#
#################################################################################
 .text
sort_init:
 addi $s0,$0,-1
 addi $s1,$0,0
 sw $s0,512($s1)
 addi $s0,$s0,1
 addi $s1,$s1,4
 sw $s0,512($s1)
 addi $s0,$s0,1
 addi $s1,$s1,4
 sw $s0,512($s1)
 addi $s0,$s0,1
 addi $s1,$s1,4
 sw $s0,512($s1)
 addi $s0,$s0,1
 addi $s1,$s1,4
 sw $s0,512($s1)
 addi $s0,$s0,1
 addi $s1,$s1,4
 sw $s0,512($s1)
 addi $s0,$s0,1
 addi $s1,$s1,4
 sw $s0,512($s1)
 addi $s0,$s0,1
 addi $s1,$s1,4
 sw $s0,512($s1)
 
 #$s0为前一个下标,$s1为后一个下标.$s2大循环次数
 addi $s2,$0,8   #循环8次

sort_loop:
 add $s0,$zero,$zero  #$s0=0
 addi $s1,$zero,4     #$s1=4
 
sort_in:
 lw $s3,512($s0)     #$s3=[s0]
 lw $s4,512($s1)     #$s4=[s1]
 slt $t0,$s3,$s4     #R[$rd]←R[$rs]<R[$rt] 小于置1,有符号比较
 beq $t0,$0,sort_next   #降序排序
 sw $s3, 512($s1)
 sw $s4, 512($s0)   
sort_next:
 add $s0, $0, $s1   #$s0=$s1
 addi $s1,$s0,4     #$s1=4+$s0
 
 bne $s0, $s2, sort_in  
 
 addi $s2,$zero,-1
 bne $s2, $0, sort_loop
 
 addi   $v0,$zero,10         # system call for exit
 syscall                  # we are out of here.   

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Who_Am_I.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值