Bubble Sort [ASM-MIPS]
# 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]的更多相关文章
- Java中的经典算法之冒泡排序(Bubble Sort)
Java中的经典算法之冒泡排序(Bubble Sort) 神话丿小王子的博客主页 原理:比较两个相邻的元素,将值大的元素交换至右端. 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一 ...
- Bubble Sort (5775)
Bubble Sort Problem Description P is a permutation of the integers from 1 to N(index starting from ...
- HDU 5775 Bubble Sort(冒泡排序)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)
Bubble Sort 题意: 给你一个1~n的排列,问冒泡排序过程中,数字i(1<=i<=n)所到达的最左位置与最右位置的差值的绝对值是多少 题解: 数字i多能到达的最左位置为min(s ...
- 快速幂取模 POJ 3761 bubble sort
题目传送门 /* 题意:求冒泡排序扫描k次能排好序的全排列个数 数学:这里有一个反序列表的概念,bj表示在j左边,但大于j的个数.不多说了,我也是看网上的解题报告. 详细解释:http://blog. ...
- 冒泡排序(Bubble Sort)
常见的排序算法有Bubble Sort.Merge Sort.Quick Sort 等,所有排序算的基本法思想都是把一个无限大的数据规模通过算法一步步缩小,指导最后完成排序. 这里分享一下Buuble ...
- [算法] 冒泡排序 Bubble Sort
冒泡排序(Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没 ...
- HDU 5775 Bubble Sort (线段树)
Bubble Sort 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...
- c++算法联系,冒泡排序,bubble sort,插入排序,insert sort,
#include <iostream.h> #define MAX 100 void dispaly(int a[],int n) { for(int i=0;i<n;i+ ...
随机推荐
- jQuery自定义漂亮的下拉框插件8种效果
jquery美化选择器实例有:边框.下划线. 伸缩 .滑动. 覆盖. 旋转. 弹出层选择 .环形效果. 在线预览 实例代码 <body class="demo-1"> ...
- Nivo Slider - 世界上最棒的 jQuery 图片轮播插件
Nivo Slider 号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如 ...
- 【zepto学习笔记01】核心方法$()
前言 我们移动端基本使用zepto了,而我也从一个小白变成稍微靠谱一点的前端了,最近居然经常要改到zepto源码但是,我对zepto不太熟悉,其实前端水准还是不够,所以便私下偷偷学习下吧,别被发现了 ...
- Asp.net Ibatis 增、删、改、查
好久都没用.net Ibatis配置了 今天给大家分享一下获取它的增.删.改.查. #region 节点类型表 public bool InsertNodeType(NodeType allRevie ...
- jQuery 重要的知识点归纳
jQuery 对象 jQuery 对象就是通过 jQuery 包装 DOM 对象后产生的对象. jQuery 对象是 jQuery 独有的. 只有 jQuery 对象才能使用 jQuery 的方法,在 ...
- HTML <fieldset> 标签将表单内的相关元素分组
<fieldset> 标签将表单内容的一部分打包,生成一组相关表单的字段. 当一组表单元素放到 <fieldset> 标签内时,浏览器会以特殊方式来显示它们,它们可能有特殊的边 ...
- 【原】iOS动态性(二):运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法,就算是私有方法以及私有属性都是可以动 ...
- animate 实现滑动切换效果
今天和大家分享一下用 animate 实现滑动切换效果的小例子 ------- 来自<一只有梦想的前端小白> 大家都知道jQuery 提供的有一下几种方法能够实现滑动效果: slideDo ...
- Arcgis Engine 切割图斑(ITool)
public override void OnMouseDown(int Button, int Shift, int X, int Y) { // TODO: Add Cut.OnMouseDown ...
- Android JNI简介
JNI简介 JNI (Java Native Interface),Java的本地接口 JNI是Java众多开发技术中的一门,意在利用本地代码,为Java程序提供 更高效,更灵活的拓展.应用场景包括: ...