You are on page 1of 2

C:\Users\Little_Chick\Desktop\InsertionSort.

asm Friday, April 29, 2011 7:48 PM

1 # author: Mai Vuong Minh Nhat MSSV: 1012277


2 # bai nay code chua duoc optimize nen hoi dai, ma lam nhu vay thi cac ban doc de hieu
hon
3 # For source code: please visit itspiritclub.net
4 #################################################################################
5 .data
6 str: .space 100
7 str0: .asciiz "Please input amount of array: "
8 str1: .asciiz "Please input str["
9 str2: .asciiz "]: "
10 str3: .asciiz "The array was Quick Sort: "
11 str4: .asciiz " "
12 .text
13 .globl main
14 main:
15 la $a0, str0 # a0 = address of "str0"
16 addi $v0, $zero, 4 # print string "str0"
17 syscall
18 add $t0, $zero, $zero # i = 0
19 addi $v0, $zero, 5 # Input n
20 syscall
21 add $s7, $v0, $zero # n = v0
22 la $a0, str # a0 = address array
23 add $s1, $a0, $zero # s1 = address of array
24 Input:
25 la $a0, str1 # a0 = address str1
26 addi $v0, $zero, 4 # print str1
27 syscall
28 add $a0, $zero, $t0 # print i
29 addi $v0, $zero, 1 # print i
30 syscall
31 la $a0, str2 # a = address str2
32 addi $v0, $zero, 4 # print str2
33 syscall
34 addi $v0, $zero, 5 # read array[i]
35 syscall
36 sll $t2, $t0, 2 # t2 = i * 4
37 add $t1, $t2, $s1 # address of array[i]
38 sw $v0, 0($t1) # store byte array[i]
39 addi $t0, $t0, 1 # i = i + 1
40 slt $t3, $t0, $s7 # comparison i and n
41 bne $t3, $zero, Input # if i < n go to label "Input"
42
43 jal InsertionSort # jump and linked to label "InsertionSort"
44
45 la $a0, str3 # a = address of "str3"
46 addi $v0, $zero, 4 # print "str3"
47 syscall
48 add $t0, $zero, $zero # i = 0
49 Output:
50 sll $t2, $t0, 2 # t2 = i * 4
51 add $t1, $t2, $s1 # address of array[i]
52 lw $a0, 0($t1) # store byte array[i]
53 addi $v0, $zero, 1
54 syscall
55 addi $t0, $t0, 1 # i = i + 1
56 la $a0, str4
57 addi $v0, $zero, 4

-1-
C:\Users\Little_Chick\Desktop\InsertionSort.asm Friday, April 29, 2011 7:48 PM

58 syscall
59 slt $t3, $t0, $s7 # comparison i and n
60 bne $t3, $zero, Output # if i < n go to label "Output"
61 Exit:
62 addi $v0, $zero, 10 # exit
63 syscall
64 InsertionSort:
65 addi $s2, $zero, 1 # i = 1
66 for:
67 slt $t0, $s2, $s7 # i < n ?
68 beq $t0, $zero, esc # if i >= n go to label "esc"
69 sll $t0, $s2, 2 # t0 = i * 4
70 add $t1, $s1, $t0 # address of array[i]
71 lw $t2, 0($t1) # x = array[i]
72 addi $s3, $s2, -1 # j = i - 1
73 while:
74 slt $t3, $s3, $zero # j < 0?
75 bne $t3, $zero, con # if j < 0 go to label "con"
76 sll $t3, $s3, 2 # j = j * 4
77 add $t4, $s1, $t3 # address of array[j]
78 lw $t5, 0($t4) # t5 = array[j]
79 slt $t0, $t2, $t5 # x < array[j] ?
80 beq $t0, $zero, con # if x >= array[j] go to label "con"
81 sw $t5, 4($t4) # array[j+1] = array[j]
82 addi $s3, $s3, -1 # j = j - 1
83
84 j while # jump to label "while"
85 con:
86 addi $s3, $s3, 1 # j = j + 1
87 sll $t6, $s3, 2 # j = j * 4
88 add $t6, $t6, $s1 # address of array[j+1]
89 sw $t2, 0($t6) # array[j+1] = x
90 addi $s2, $s2, 1 # i = i+1
91 j for # jump to label "for"
92 esc:
93 jr $ra
94
95

-2-

You might also like