MIPS汇编语言实现选择排序
来源:互联网 发布:康德…知乎 编辑:程序博客网 时间:2024/05/22 01:44
MIPS汇编语言实现排序算法,其实并不难。只要你掌握了基本的指令语句,并且熟悉C或C++相关算法,即可轻松写出来。对于MIPS汇编语言还不太熟悉的伙伴,可以参考下面这篇博客:http://blog.csdn.net/ben_chong/article/details/51794392。
它的具体实现代码如下:
``````**********************C++代码************************#include<iostream>using namespace std;int main(){ int num[10]; int i, j, max, index; for(i = 0; i < 10; i++) cin>>num[i]; for(i = 0; i < 9; i ++){ max = num[i]; index = i; for(j = i+1; j < 10; j++){ if(max < num[j]){ max = num[j]; index = j; } } num[index] = num[i]; num[i] = max; } for(i = 0; i < 10; i++) cout<<num[i]<<" "; } **********************MIPS汇编代码************************.text # 代码段 声明.globl main # globl指明程序的入口地址mainmain: # 程序入口地址 la $a0,input_num_msg # 取字符串首地址 li $v0,4 #4号功能调用,输出字符串 syscall #系统调用,输出字符串 la $t6,array # $t6 是数组首地址 move $t7,$zero # $t7 是循环变量i addi $t8,$zero,10 # $t8 是数组长度 move $t9,$zero # $t9 是循环变量jinput: # input代码块用于完成数组元素的输入 la $a0,input_int_msg # 取字符串首地址 #打印字符串,提示用户输入数组的元素 li $v0,4 syscall li $v0,5 syscall move $t0,$t7 # 此处类似于C/C++中指针访问数组元素的方法 mul $t0,$t0,4 # 数组元素所占字节数*循环变量+数组的起始地址=数组[循环变量] addu $t1,$t0,$t6 # '无符号数字相加 sw $v0,0($t1) # ''把$v0的数据存入到$t1中,地址偏移量为0 addi $t7,$t7,1 # $t7 = $t7 +1 循环变量i+1 blt $t7,$t8,input # branch to input if $t7 < $t8 move $t7,$zero # 完成输入后将循环变量置为0,可作为下一个循环的循环变量,以节省寄存器; $t7作为 iloop1: addu $t9,$t7,1 # 每次执行外层循环都将内层循环的循环变量置为i+1 mul $t0,$t7,4 #获取a[i],作为max,即$t2 为max addu $t1,$t0,$t6 lw $t2,0($t1) #偏移量,寻址 move $t5,$t1 #初始化最后一次和max交换的j的值loop2: move $t0,$t9 #获取a[j] mul $t0,$t0,4 addu $t4,$t0,$t6 lw $t3,0($t4) bge $t2,$t3,skip # 如果a[i] > a[j],跳转到skip代码块 lw $t2,0($t4) # 否则就执行下面这两句,赋值 move $t5,$t4 #记录下j的值skip: addi $t9,$t9,1 # 内层循环变量自增 blt $t9,$t8,loop2 # 且判断是否还满足循环条件,如果满足,则跳转到loop2 lw $t4,0($t1) # 如果不满足,先进行赋值 sw $t4,0($t5) sw $t2,0($t1) #'赋值 addi $t7,$t7,1 # 再将外层循环的循环变量自增 addi $t4,$t7,1 #且判断是否还满足循环条件 blt $t4,$t8,loop1 # 如果满足,则跳转到loop1 # 如果不满足,则不跳转,继续执行下面的代码output: la $a0,output_int_msg # 打印字符串,提示用户即将输出程序 li $v0,4 syscall move $t7,$zero # 将循环变量置为0,用于下一循环,节省寄存器print: # 实现打印数组元素 move $t0,$t7 mul $t0,$t0,4 addu $t1,$t0,$t6 lw $a0,0($t1) li $v0,1 syscall la $a0,seperate # 分隔数组元素 li $v0,4 syscall addi $t7,$t7,1 blt $t7,$t8,print # 如果满足循环条件,跳转到print继续执行循环.data # 数据段声明array:.space 10 # 给array分配10个空间input_num_msg:.asciiz "Please enter 10 unsigned number:\n"input_int_msg:.asciiz "Please enter an unsigned integers to be sorted:\n"output_int_msg:.asciiz "The sorted numbers are:\n"seperate:.asciiz " "
当然,我的代码里的数组长度已经固定为10。只要适当修改,就可以实现真正的选择排序。——在源代码中增加一段用户输入数组长度的代码语句即可。
1 0
- MIPS汇编语言实现选择排序
- [MIPS汇编语言]简单排序实现
- 用汇编语言实现冒泡排序——基于MIPS指令系统
- ECOP——MIPS汇编语言实现冒泡排序
- [MIPS汇编语言]InsertionSort插入排序
- mips 选择排序
- MIPS实现冒泡排序
- mips汇编语言之实现swap函数
- mips汇编语言实现if-else分支结构
- mips 大概是传说中的选择排序
- 汇编语言实现冒泡排序
- 汇编语言实现冒泡排序
- mips汇编语言实现Fibonacci(斐波那契)数列
- mips汇编语言伪指令
- mips汇编语言编写计数器
- MIPS汇编语言的特点
- MIPS汇编语言相关
- MIPS汇编语言参考
- web安全与防御---4.第一次玩Burp Suite暴力破解
- 多线程中线程池的简单实现
- TP框架实现echarts动态获取数据
- 97.文本框监听器
- Centos(64位)下安装配置MySQL
- MIPS汇编语言实现选择排序
- android:inputType汇总整理
- 98.插补器原理实现文本框的抖动
- 翻转汇编第6周总结
- windows10 安装nginx
- mysql:is blocked because of many connection errors解决方案
- Nginx基本入门
- android所有的服务汇总
- 99.手机的振动