-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQuickSort.ASM
More file actions
205 lines (167 loc) · 3.9 KB
/
Copy pathQuickSort.ASM
File metadata and controls
205 lines (167 loc) · 3.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
org 100h
Start:
call PrintArr
push 0
push n - 1
call QuickSort
call NewLine
call PrintMas
mov ah, 08h
int 21h
ret
;=================================================
QuickSort:
push bp
mov bp, sp
sub sp, 6
mov ax, [bp + 6]
mov [bp - 2], ax
mov ax, [bp + 4]
mov [bp - 4], ax
add ax, [bp + 6]
mov bl, 2
div bl
movzx bx, al
mov si, mas
add si, bx
movzx bx, [si]
mov [bp - 6], bx
.Repeat:
.While1:
mov bx, [bp - 2]
mov si, mas
movzx dx, [si + bx]
mov di, [bp - 6]
cmp dx, di
jge .While2
add bx, 1
mov [bp - 2], bx
jmp .While1
.While2:
mov bx, [bp - 4]
mov si, mas
movzx dx, [si + bx]
mov di, [bp - 6]
cmp dx, di
jle @F
sub bx, 1
mov [bp - 4], bx
jmp .While2
@@:
mov ax, [bp - 2]
mov dx, [bp - 4]
cmp ax, dx
jg .Next
mov si, mas
add si, ax
movzx ax, [si]
mov si, mas
add si, dx
movzx dx, [si]
mov si, mas
mov bx, [bp - 2]
mov byte[si + bx], dl
mov si, mas
mov bx, [bp - 4]
mov byte[si + bx], al
mov si, [bp - 2]
add si, 1
mov [bp - 2], si
mov di, [bp - 4]
sub di, 1
mov [bp - 4], di
.Next:
cmp si, di
jle .Repeat
mov ax, [bp + 6]
mov dx, [bp - 4]
cmp ax, dx
jl @F
jmp .Again1
@@:
push ax
push dx
call QuickSort
.Again1:
mov ax, [bp - 2]
mov dx, [bp + 4]
cmp ax, dx
jl @F
jmp .Again2
@@:
push ax
push dx
call QuickSort
.Again2:
mov sp, bp
pop bp
ret 4
;=================================================
PrintArr:
push bp
mov bp, sp
mov cx, n
mov di, 0
.loop:
movzx ax, [mas + di]
push di
push cx
call Output
pop cx
pop di
add di, 1
loop .loop
mov sp, bp
pop bp
ret
;=================================================
Output:
push bp
mov bp, sp
xor di, di
test eax, eax
jne .Divide
push $30
inc di
jmp .Print
.Divide:
mov bx, 10
mov cx, 10
.Loop:
cmp eax, 0
je .Print
xor edx, edx
div ebx
add dx, '0'
push dx
inc di
.Next:
loop .Loop
.Print:
mov cx, di
mov ah, 02h
@@:
pop dx
int 21h
loop @B
mov ah, 09h
mov dx, Next
int 21h
mov sp, bp
pop bp
ret
;============================================
NewLine:
push bp
mov bp, sp
mov ah, 09h
mov dx, newLine
int 21h
mov sp, bp
pop bp
ret
;=============================================
n = 9
mas db 100, 79, 102, 255, 134, 65, 109, 67, 58
Next db ' ','$'
newLine db 0ah, 0dh, 24h