Skip to content

Commit d2cb1a8

Browse files
committed
Added MergeSort Assembly
1 parent fd4911c commit d2cb1a8

File tree

3 files changed

+266
-1
lines changed

3 files changed

+266
-1
lines changed

ASM_MergeSort/msort.asm

Lines changed: 216 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,216 @@
1+
#Merge Sort Implemention for MIPS
2+
# scopeInfinity :P
3+
4+
# My Conventions
5+
# $s0 = N
6+
# $s1 = &A[0]
7+
# $s3 = &A[i]
8+
9+
.data
10+
A: .space 400 #100 Elements
11+
B: .space 400 #100 Elements
12+
promptN: .asciiz "Enter Number of Elements : "
13+
promptNum: .asciiz "Enter Numbers : "
14+
sortMsg: .asciiz "Sorted Numbers : "
15+
NoEle: .asciiz "No Element!"
16+
Space: .asciiz " "
17+
18+
19+
.text
20+
main:
21+
li $v0, 4
22+
la $a0, promptN
23+
syscall
24+
li $v0, 5
25+
syscall
26+
move $s0, $v0 #N
27+
ble $s0, $0, ExitNoElement
28+
29+
li $v0, 4
30+
la $a0, promptNum
31+
syscall
32+
33+
move $t0, $s0 #Counter
34+
la $s3, A
35+
move $s1, $s3
36+
37+
loopInput:
38+
li $v0, 5
39+
syscall
40+
sw $v0, 0($s3)
41+
addi $s3, $s3, 4
42+
addi $t0, $t0, -1
43+
bne $t0, $0, loopInput
44+
45+
sw $ra, 0($sp)
46+
addi $sp, $sp, 4
47+
jal mergeSortInit
48+
addi $sp, $sp, -4
49+
lw $ra, 0($sp)
50+
51+
li $v0, 4
52+
la $a0, sortMsg
53+
syscall
54+
55+
move $t0, $s0 #Counter
56+
la $s3, A
57+
loopOutput:
58+
lw $a0, 0($s3)
59+
li $v0, 1
60+
syscall
61+
la $a0, Space
62+
li $v0, 4
63+
syscall
64+
addi $s3, $s3, 4
65+
addi $t0, $t0, -1
66+
bne $t0, $0, loopOutput
67+
68+
Exit:
69+
li $v0, 10 #Exit
70+
syscall
71+
72+
ExitNoElement:
73+
li $v0, 4
74+
la $a0, NoEle
75+
syscall
76+
j Exit
77+
78+
mergeSortInit:
79+
move $a0, $s1
80+
sll $t0, $s0, 2
81+
add $a1, $a0, $t0
82+
addi $a1, $a1, -4
83+
sw $ra, 0($sp)
84+
addi $sp, $sp, 4
85+
jal mergeSort
86+
addi $sp, $sp, -4
87+
lw $ra, 0($sp)
88+
jr $ra
89+
90+
91+
#Arguments F=$a0, L=$a1
92+
mergeSort:
93+
bge $a0, $a1, mergeSortEnd #if(F>L) return;
94+
95+
sub $t1, $a1, $a0
96+
addi $t1, $t1, 4
97+
srl $t1, $t1, 2 #t1 = n
98+
99+
srl $t0, $t1, 1 #n/2
100+
sll $t0, $t0, 2
101+
add $t0, $t0, -4
102+
add $t0, $t0, $a0 #F+n/2-1
103+
104+
sw $ra, 0($sp) #Store Activation Record
105+
sw $a0, 4($sp)
106+
sw $a1, 8($sp)
107+
sw $t0, 12($sp)
108+
addi $sp, $sp, 16
109+
#Parameters
110+
move $a1, $t0
111+
jal mergeSort
112+
addi $sp, $sp, -16
113+
lw $ra, 0($sp) #Load Activation Record
114+
lw $a0, 4($sp)
115+
lw $a1, 8($sp)
116+
lw $t0, 12($sp)
117+
118+
addi $t0, $t0, 4 #M
119+
120+
sw $ra, 0($sp) #Store Activation Record
121+
sw $a0, 4($sp)
122+
sw $a1, 8($sp)
123+
sw $t0, 12($sp)
124+
addi $sp, $sp, 16
125+
#Parameters
126+
move $a0, $t0
127+
jal mergeSort
128+
addi $sp, $sp, -16
129+
lw $ra, 0($sp) #Load Activation Record
130+
lw $a0, 4($sp)
131+
lw $a1, 8($sp)
132+
lw $t0, 12($sp)
133+
134+
addi $t0, $t0, -4 #M
135+
136+
sw $ra, 0($sp) #Store Activation Record
137+
addi $sp, $sp, 4
138+
#Parameters
139+
move $a2, $a1
140+
move $a1, $t0
141+
jal merge
142+
addi $sp, $sp, -4
143+
lw $ra, 0($sp) #Load Activation Record
144+
145+
146+
mergeSortEnd:
147+
jr $ra
148+
149+
#Arguments $a0, $a1, $a2
150+
merge:
151+
move $t5, $a0 #i
152+
move $t6, $a1
153+
addi $t6, $t6, 4 #j
154+
la $t7, B #k
155+
156+
loop1:
157+
sle $t3, $t5, $a1
158+
sle $t4, $t6, $a2
159+
and $t3, $t3, $t4
160+
beq $t3, $0, loop1End
161+
162+
lw $t0, 0($t5)
163+
lw $t1, 0($t6)
164+
blt $t0, $t1, merge_if1
165+
sw $t1, 0($t7)
166+
add $t6, $t6, 4
167+
j merge_if1_e
168+
merge_if1:
169+
sw $t0, 0($t7)
170+
add $t5, $t5, 4
171+
merge_if1_e:
172+
add $t7, $t7, 4
173+
j loop1
174+
loop1End:
175+
176+
loop2:
177+
sle $t4, $t6, $a2
178+
beq $t4, $0, loop2End
179+
180+
lw $t1, 0($t6)
181+
sw $t1, 0($t7)
182+
add $t6, $t6, 4
183+
add $t7, $t7, 4
184+
185+
j loop2
186+
loop2End:
187+
188+
loop3:
189+
sle $t4, $t5, $a1
190+
beq $t4, $0, loop3End
191+
192+
lw $t1, 0($t5)
193+
sw $t1, 0($t7)
194+
add $t5, $t5, 4
195+
add $t7, $t7, 4
196+
197+
j loop3
198+
loop3End:
199+
200+
move $t5, $a0 #i
201+
la $t7, B #j
202+
203+
loop4:
204+
sle $t4, $t5, $a2
205+
beq $t4, $0, loop4End
206+
207+
lw $t1, 0($t7)
208+
sw $t1, 0($t5)
209+
add $t5, $t5, 4
210+
add $t7, $t7, 4
211+
212+
j loop4
213+
loop4End:
214+
215+
216+
jr $ra

ASM_MergeSort/msort.c

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#include <stdio.h>
2+
int N, A[100];
3+
4+
void merge(int *F,int *M,int *L)
5+
{
6+
int B[100];
7+
int *i=F,*j=M+1,*k=&B[0];
8+
while(i<=M && j<=L)
9+
{
10+
if(*i<*j)
11+
*(k++) = *(i++);
12+
else *(k++) = *(j++);
13+
}
14+
while(j<=L)
15+
*(k++) = *(j++);
16+
while(i<=M)
17+
*(k++) = *(i++);
18+
i=F;
19+
j=B;
20+
while(i<=L)
21+
*(i++) = *(j++);
22+
23+
}
24+
void msort(int *F,int *L)
25+
{
26+
if(L>F)
27+
{
28+
int n = L-F+1;
29+
int *M = F+n/2-1;
30+
msort(F,M);
31+
msort(M+1,L);
32+
merge(F,M,L);
33+
}
34+
}
35+
int main()
36+
{
37+
int i;
38+
printf("Enter Number of Elements : ");
39+
scanf("%d",&N);
40+
printf("Enter numbers : ");
41+
for (i = 0; i < N; ++i)
42+
scanf("%d",&A[i]);
43+
msort(&A[0],&A[0]+N-1);
44+
printf("\nSorted Array : ");
45+
for (i = 0; i < N; ++i)
46+
printf("%d ",A[i]);
47+
48+
49+
return 0;
50+
}

MergeSort_ASM

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)