# Program: Bubble sort
# Language: MIPS Assembly (32-bit)
# Arguments: 5 unordered numbers stored in $2 ~ $6 reg
# Author: brant-ruan
# Date: 2016-03-10
# IDE: MARS 4.5
# P.S.
#   This program is one of my homework and the number of assembly instructions allowed is just 31.
#   If I can use all the instructions of MIPS, optimizations will be considered.
#   (E.g. The index() function should have been not necessary)
# Minds:
#   It is not a good idea to store numbers from reg to mem. However, if using reg to sort directly,
#   the program will be ridiculous for the regs can't be indexed as an array(Can they ?).
#  My friend told me another brilliant idea that there's no need to swap $2 and $3, you can just store them to mem in the right order!!! Thanks!
######################################################################################################
.data
.word
array:  0, 0, 0, 0, 0
.text
# initialize $2 ~ $6
    xor $2, $2, $2
    xor $3, $3, $3
    xor $4, $4, $4
    xor $5, $5, $5
    xor $6, $6, $6
    add $2, $2, 7
    add $3, $3, 4
    add $4, $4, 8
    add $5, $5, 13
    add $6, $6, 2
# store values to be sorted into mem
    sw $2, array+0
    sw $3, array+4
    sw $4, array+8
    sw $5, array+12
    sw $6, array+16

    xor $5, $5, $5  # i
    xor $6, $6, $6  # j
    xor $7, $7, $7  # max_num
    add $7, $7, 4   # max_num = 5 - 1 (the number of elements minus 1)
    j begin
###############################################################################
# Sort procedure
sort:
    # prototype: sort($2, $3)
    # if $2 > $3 then swap($2, $3) else return
    slt $4, $3, $2  # $4 is flag
    beq $4, 0, sort_ret_src
    xor $2, $2, $3
    xor $3, $2, $3
    xor $2, $2, $3
sort_ret_src:
    j sort_ret_dst
###############################################################################
# Generate index procedure
index:
    # For the data-type is word, we should generate 4*j as index
    # prototype: index($12)
    # if $30 is 0, store valid index in $9 and return to load_0, else store in $11 and return to load_1
    xor $31, $31, $31     # count
    xor $29, $29, $29     # valid index which will be returned
multiply:
    beq $12, $31, ret     # if count == $12, return
    add $29, $29, 4       #  $29 += 4
    add $31, $31, 1       #  count++
    j multiply
ret:
    beq $30, 1, ret_1     # judge return where
ret_0:
    xor $9, $9, $9
    add $9, $9, $29
    j load_0
ret_1:
    xor $11, $11, $11
    add $11, $11, $29
    j load_1
###############################################################################
begin:
    beq $5, $7, end     # if i == max_num, go to end
    xor $10, $10, $10
    add $10, $6, 1      # $10 is j+1
    xor $12, $12, $12   # $12 is parameter of 'index' function
    add $12, $12, $6    # deliver $6 (j) to $12
    xor $30, $30, $30   # tell index() to return to load_0
    j index
load_0:
    lw  $2, array($9)   # load array[j] to $2 ($9 is index of j)
    xor $12, $12, $12
    add $12, $12, $10   # deliver $10 (j+1) to $12
    xor $30, $30, $30
    add $30, $30, 1     # tell index() to return to load_1
    j index
load_1:
    lw  $3, array($11)  # load array[j+1] to $3 ($11 is index of j+1)
    j sort
sort_ret_dst:
    sw  $2, array($9)   # store $2 into array[j]
    sw  $3, array($11)  # store $3 into array[j+1]
    add $6, $6, 1       # j++
    sub $8, $7, $5      # $8 is (max_num - i)
    bne $6, $8, next    # if j < max_num-i, go to next
    add $5, $5, 1       # i++
    xor $6, $6, $6      # j = 0
next:
    j begin
end:
# reload sorted array to $2 ~ $6
    lw $2, array+0
    lw $3, array+4
    lw $4, array+8
    lw $5, array+12
    lw $6, array+16

Bubble Sort [ASM-MIPS]的更多相关文章

  1. Java中的经典算法之冒泡排序(Bubble Sort)

    Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...

  2. Bubble Sort (5775)

    Bubble Sort Problem Description   P is a permutation of the integers from 1 to N(index starting from ...

  3. HDU 5775 Bubble Sort(冒泡排序)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  4. 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)

    Bubble Sort 题意: 给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少 题解: 数字i多能到达的最左位置为min(s ...

  5. 快速幂取模 POJ 3761 bubble sort

    题目传送门 /* 题意:求冒泡排序扫描k次能排好序的全排列个数 数学:这里有一个反序列表的概念,bj表示在j左边,但大于j的个数.不多说了,我也是看网上的解题报告. 详细解释:http://blog. ...

  6. 冒泡排序(Bubble Sort)

    常见的排序算法有Bubble Sort.Merge Sort.Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序. 这里分享一下Buuble ...

  7. [算法] 冒泡排序 Bubble Sort

    冒泡排序(Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没 ...

  8. HDU 5775 Bubble Sort (线段树)

    Bubble Sort 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...

  9. c++算法联系,冒泡排序,bubble sort,插入排序,insert sort,

    #include <iostream.h> #define  MAX 100 void dispaly(int a[],int n) {     for(int i=0;i<n;i+ ...

随机推荐

  1. 酷!使用 jQuery & Canvas 制作相机快门效果

    在今天的教程中,我们将使用 HTML5 的 Canvas 元素来创建一个简单的摄影作品集,它显示了一组精选照片与相机快门的效果.此功能会以一个简单的 jQuery 插件形式使用,你可以很容易地整合到任 ...

  2. Heatmap.js v2.0 – 最强大的 Web 动态热图

    Heatmap 是用来呈现一定区域内的统计度量,最常见的网站访问热力图就是以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示.Heatmap.js 这个 JavaScript 库可以实现 ...

  3. JavaScript基础系列(变量与类型)

    以下内容将JavaScript简称为JS 打开本文时不管你是零基础的初学者还是其他语言的老兵,我都想说程序语言的基础支撑起了整个网络世界,不把这些基础学透之后稍复杂的内容会让你寸步难行. 现在先给编程 ...

  4. Request.MapPath和ServerMapPath

    一.路径 / 念 反斜杠,/ 是超文本协议的路径分隔符号,所有的网站在浏览器中显示的路径分隔都是以"/"表示.它一般代表虚拟路径. \ 念 斜杠,在普通程序代码中则以"\ ...

  5. spring理解

    Struts与Hibernate可以做什么事? Struts,Mvc中控制层解决方案,可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate,持久层的解决方案:可以做到,把对象保存到 ...

  6. Android 在C代码中调用logcat

    本文给<Android java传递int类型数组给C>中添加C代码中调用logcat的功能 Android.mk文件增加以下内容 LOCAL_LDLIBS += -llog C代码中增加 ...

  7. Xcode7.3更新后插件失效的解决方法

    昨天发布的Xcode7.3,用了一天的时间终于装上了(网络不给力),突然发现原来所使用的插件不能用了,当时表情如下: 记得在更新7.2的时候也是这样的,当时重新下载的插件安装成功,但是未免有些麻烦,经 ...

  8. 【读书笔记】iOS网络-保护网络传输

    一,验证服务器通信. 二,HTTP认证. 手机银行应用有两种认证模式:标准验证与快速验证.标准验证只是提示用户输入用户名与密码,而快速验证则让用户注册设备,然后使用PIN进行验证,每次验证时无需用户名 ...

  9. NSArray与NSMutableArray 数组与可变数组

    1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组.2.NSArray的创建NSArray * array = [[NSArray alloc]initWith ...

  10. 【原+转】用CMake代替makefile进行跨平台交叉编译

    在开始介绍如何使用CMake编译跨平台的静态库之前,先讲讲我在没有使用CMake之前所趟过的坑.因为很多开源的程序,比如png,都是自带编译脚本的.我们可以使用下列脚本来进行编译: ./configu ...