-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathbubble_sort_display.s
122 lines (113 loc) · 1.27 KB
/
bubble_sort_display.s
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
SYSEXIT = 1
EXIT_SUCCESS = 0
SYSWRITE = 4
STDIN = 0
STDOUT = 1
SYSCALL = 0x80
.global _start
.text
.data
s1: .asciz "\nTablica przed:\n"
s2: .asciz "\nTablica po:\n"
s3: .asciz "\n"
tab: .long 9,1,8,2,7,3,6,4,5
f:
mov $SYSWRITE, %EAX
mov $STDOUT, %EBX
mov $s1, %ECX
mov $16, %EDX
int $SYSCALL
ret
sec:
mov $SYSWRITE, %EAX
mov $STDOUT, %EBX
mov $s2, %ECX
mov $13, %EDX
int $SYSCALL
ret
nl:
mov $SYSWRITE, %EAX
mov $STDOUT, %EBX
mov $s3, %ECX
mov $2, %EDX
int $SYSCALL
ret
l:
mov $0, %EDX
mov $10, %EBX
div %EBX
add $48, %EDX
push %EDX
inc %ESI
cmp $0, %EAX
jz next
jmp l
next:
cmp $0, %ESI
jz exit
dec %ESI
mov $SYSWRITE, %EAX
mov %ESP, %ECX
mov $STDOUT, %EBX
mov $1, %EDX
int $SYSCALL
add $4, %ESP
jmp next
exit:
ret
sort:
mov $0, %EAX
mov $0, %EBX
mov $0, %ESI
w:
cmp $36, %EBX
jge r
mov tab(%EBX), %EAX
add $4, %EBX
cmp %EAX, tab(%EBX)
jl x
jmp w
x:
xchg %EAX, tab(%EBX)
sub $4, %EBX
mov %EAX, tab(%EBX)
add $4, %EBX
mov $1, %ESI
jmp w
r:
cmp $1, %ESI
je sort
jmp k
k:
ret
ox:
xor %EDX, %EDX
xor %EAX, %EAX
xor %EBX, %EBX
xor %EDI, %EDI
xor %ECX, %ECX
ret
pp:
cmp $36, %EDI
jge en
mov tab(%EDI), %EAX
call l
add $4, %EDI
jmp pp
en:
ret
_start:
call f
call ox
call pp
call ox
call sec
call ox
call sort
call ox
call pp
call nl
call nl
mov $SYSEXIT, %EAX
mov $EXIT_SUCCESS, %EBX
int $SYSCALL