【mips】冒泡排序

本文介绍了一个基于MIPS汇编语言实现的冒泡排序程序。通过该程序的学习,可以掌握MIPS汇编指令的基本使用及循环控制结构。文章还提供了详细的代码注释和执行流程说明,并使用Marssimulator4.5-win进行调试与执行时间测量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博客地址转至https://xisynotz.xyz

 

MIPS汇编实现冒泡排序 

一、    实验目的

了解并学习使用mips汇编指令,掌握如何使用mips模拟器

 

二、    实验要求

基于MIPS汇编,设计一个冒泡排序程序,并用 Debug工具调试执行。测量冒泡排序程序的执行时间。

 

三、    实验环境

Mars simulator 4.5-win

 

四、    代码分析

.globl main

.text

# $t0: temp

# $t4: 循环变量i

# $t6: 循环变量j

# $t8: k

# $t5:数据长度

main:      

   li $v0, 5     

   syscall   

   add  $t5, $zero, $v0 #读取记录数据长度

   

   subi  $t4, $t5, 1

   addi $t8, $zero, 0

   la $t1, sortarray

loop:                                      #读取数据存放到sortarray处

   li $v0 5

   syscall

   sw $v0, 0($t1)

   addi $t0, $zero, 1

   beq  $t0,$t5,label          #如果只有一个数字则不进行排序

   addi $t8, $t8, 1

   addi $t1, $t1, 4

   sub $t7, $t5, $t8

   bgtz $t7, loop


   li $v0, 30

syscall   

add $s1, $a0, $zero #$s1记录开始时间,这里不从人为输入开始计算,#避免人为因素影响,只测量主体程序执行时间

 

loop1:

   la $t1, sortarray

   addi $t6, $zero, 0            #j变量清零

loop2:

   lw $t0, 0($t1)                  #t0 = array[j]

   lw $t7, 4($t1)                # array[j+1]

   sub $t2, $t7, $t0

   bgtz $t2, increment

   sw $t7, 0($t1)

   sw $t0, 4($t1)

 
   increment:

        addi $t6, $t6, 1        #j++

        addi $t1, $t1, 4        #下一个地址

        sub $t2, $t4, $t6      #t2 = i-j

        bgtz $t2, loop2        #if j < i ,循环

 

   addiu $t4, $t4, -1           #i--

   lw $a0, 0($t1)                #a0存放每次循环得到的次最大值

   li $v0, 1                          #输出$a0

   syscall

   la $a0, seprate

   li $v0, 4                          # 输出空格

   syscall

   bne $t4, $zero, loop1


label:

   la $t1, sortarray               #输出结束后剩余的那个最小值

   lw $a0, 0($t1)

   li $v0, 1

   syscall

   

   la $a0, seprate

   li $v0, 4                          # 输出空格

   syscall
   

   li $v0, 30                         #读取结束时间

   syscall


   sub $a0 $a0,$s1

   li $v0, 1

   syscall                             #计算总用时并且输出
 

   li $v0, 10                         #halt

   syscall


.data

sortarray:.space 40

seprate: .asciiz " "

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值