# 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. Photoshop如何实现UI自动切图?

    切图严格来说并不是UI设计师的工作, 而是前端工程师的工作,指的是将UI设计师的设计(大部分为photoshop创建的PSD文件)转化为界面(网页或窗体等)所需要资源的过程.切图是衔接UI设计和应用程 ...

  2. WPF实现强大的动态公式计算

    数据库可以定义表不同列之间的计算公式,进行自动公式计算,但如何实现行上的动态公式计算呢?行由于可以动态扩展,在某些应用场景下将能很好的解决实际问题. 1.VS2012新建一个WPF应用程序WpfApp ...

  3. SlidesJS - 老牌的响应式 jQuery 幻灯片插件

    SlidesJS 是一款老牌的 jQuery 幻灯片插件,经过多年的发展,已经成为一款功能齐全,设计精巧的幻灯片插件.支持循环.自动播放功能和淡入淡出过渡效果,并且能够自动生成分页,可以帮助开发者制作 ...

  4. javascript数据类型理解整理

    起因:关于数据类型这块,自己看了很多遍相关的资料,每次查看和实践都有一些体会和理解:但又感到没有理解透,总是差一点,最近又在看这块的内容,加上最近的积累,做个相关笔记 ECMAScript数据类型:1 ...

  5. 精通 CSS 选择器(二)

    补充了一些之前遗漏掉的选择器以及一些在 Selectors Level 4 中新定义的选择器. 属性选择器不区分大小写 [attribute="value" i],在 Select ...

  6. PhpStorm下Laravel代码智能提示

    phpstorm&Laravel PHPstorm是我见过的最好的PHP的IDE,前年用的时候就毫不犹豫的抛弃了zend studio :) ,Laravel是我用过最好的框架,除了做手游后台 ...

  7. 限制EditText 输入的字节数

    1.代码 name_tv = (EditText) findViewById( R.id.name_tv ); name_tv.addTextChangedListener(new TextWatch ...

  8. iOS xcode使用断点追踪后,无法nslog,无法po对应的值 方法小结

    今天使用断点追踪后,发现无法正常nslog,使用po也无法打印出对应的值,进入断点显示的值都为nil,网上查了一下,我总结出了以下几个可行方法: 法一:项目根目录->PROGECT->Bu ...

  9. android 界面设计基本知识Ⅱ

    上一章讲述了Android界面设计时,一些基本控件的使用,本章主要讲述自定义控件,Fragment和Headler线程机制. 1.自定义控件 (1)基本知识 dp.sp和dx      px:像素点  ...

  10. Java基础知识学习(五)

    高级特性:接口 接口(Interface) 1) 接口中只能定义抽象方法,默认为 public abstract 的,变量可以是static的 2) 接口中没有构造方法 3) 一个接口不实现另一个接口 ...