[MIPS汇编语言]InsertionSort插入排序
2017-10-21 08:42
1566 查看
如果对MIPS实现数组的输入输出不懂,可以点这里
如果对MIPS实现简单排序有兴趣,可以点这里
如果你想要看一下怎么用C++(或者C)实现插入排序,可以点这里
如果你想要看一下用Python实现插入排序,可以点这里
这里举得栗子是降序排列
MIPS指令代码如下:建议和比较熟悉的高级程序语言对比着看
如果对MIPS实现简单排序有兴趣,可以点这里
如果你想要看一下怎么用C++(或者C)实现插入排序,可以点这里
如果你想要看一下用Python实现插入排序,可以点这里
这里举得栗子是降序排列
MIPS指令代码如下:建议和比较熟悉的高级程序语言对比着看
.data array: .space 1024 input_msg: .ascii "input the number" space_str: .ascii "\n" # 输出空格信息 .text .globl main main: la $t6 array # 将数组地址的起始位置放到t6寄存器中 move $t7 $zero # 将t7寄存器初始化为0,用于计数 addi $t8 $zero 10 # t8寄存器内存储好10 input: la $a0 input_msg # 将a0寄存器中放input输入信息 la $v0 4 # 4号为输出字符串命令 syscall # 系统命令调用 la $v0 5 # 5号为数字输入命令 syscall # 系统命令调用 mul $t0 $t7 4 # 计算出偏移量 add $t0 $t0 $t6 # 基地址加上偏移量得到目标地址 sw $v0 0($t0) # 将输出的数放到目标地址中 addi $t7 $t7 1 # t7寄存器内数值加一 bne $t7 $t8 input # 如果不是相等的话,就继续输入 addi $t7 $zero 1 # 将t7初始化为1 sort: slt $t0 < cf27 span class="hljs-variable">$t7 10 # 小于10的真值放到t0上 beq $t0 $zero output # 如果等于10就直接输出 mul $t0 $t7 4 # 得到偏移量 add $t0 $t0 $t6 # 得到目标地址 lw $a1 0($t0) # a1放key addi $t5 $t7 -1 # 得到i-1 j = i - 1 sort2: mul $t0 $t5 4 # t5是j add $t0 $t0 $t6 # 得到目标地址 lw $t4 0($t0) # t4中放有a[j] lw $t3 4($t0) # t3中放有a[j + 1] slt $t0 $t5 $zero # j < 0 的真值放到t0上 bne $t0 $zero putKey # 如果是真的小于0了直接到交换位置 slt $t0 $t4 $a1 # a[j] < key 的真值放到t0上 beq $t0 $zero putKey # 如果不是就到交换环节 mul $t0 $t5 4 # t5是j add $t0 $t0 $t6 # 得到目标地址 sw $t4 4($t0) # a[j + 1] = a[j] addi $t5 $t5 -1 # j = j - 1 j sort2 putKey: # a[j + 1] = key mul $t0 $t5 4 # t5是j add $t0 $t0 $t6 # 得到目标地址 sw $a1 4($t0) # 将key写入a[j + 1] addi $t7 $t7 1 # i = i + 1 j sort output: move $t7 $zero # 用于计数 控制输入 addi $t8 $zero 10 # 总共有10个数 print_all: move $t0 $t7 # 将 t7的数放到这个临时的t0上 mul $t0 $t0 4 # 得到偏移量 add $t0 $t6 $t0 lw $a0 0($t0) # 所得到的地址的的数 load到 a0上 li $v0 1 syscall la $a0 space_str li $v0 4 syscall addi $t7 $t7 1 blt $t7 $t8 print_all jr $ra li $v0 10 # 退出 syscall
相关文章推荐
- insertion sort(插入排序)
- 【LeetCode-面试算法经典-Java实现】【147-Insertion Sort List(链表插入排序)】
- 插入排序 直接插入排序的PHP实现 Straight Insertion Sort
- 算法排序--插入排序(insertion sort)
- 插入排序 (Insertion sort)
- 【算法】插入排序(Insertion Sort)
- 链表插入排序(insertion-sort-list)
- 173. 链表插入排序 (insertion-sort-list)(c++)----lintcode面试题之链表
- 插入排序(1)InsertionSort
- 【算法】插入排序 insertion_sort
- 插入排序insertionSort
- 算法:冒泡排序(Bubble Sort)、插入排序(Insertion Sort)和选择排序(Selection Sort)总结
- 算法总结JS版(三)—— 插入排序(Insertion Sort)
- PHP Array -- PHP排序 -- 插入排序(Insertion Sort)
- 插入排序(Insertion Sort)
- Leetcode Insertion Sort List 插入排序链表
- PAT 1098. Insertion or Heap Sort (25) 又掉出题人的语言陷阱里了!!
- Aizu ALDS1_1_A Insertion Sort(插入排序)
- 插入排序(INSERTION-SORT)
- 插入排序:直接插入排序-Direct insertion sort