-
Notifications
You must be signed in to change notification settings - Fork 0
/
zmiana kontrastu.asm
344 lines (315 loc) · 5.26 KB
/
zmiana kontrastu.asm
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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
.data
buf: .space 4000
plik: .space 30
wynik: .asciiz "wynik.bmp"
linia: .asciiz "\n"
tekst1: .asciiz "Podaj kontrast: "
tekst2: .asciiz "Podaj nazwe pliku: "
tekst3: .asciiz "Zmiana kontrastu(1) Rozciaganie histogramu(2): "
.text
main:
#wyswietlenie zapytania o plik
li $v0, 4
la $a0, tekst2
syscall
#wczytanie nazwy pliku
li $v0, 8
la $a0, plik
li $a1, 30
syscall
#przetworzenie nazwy
la $t0, plik
petla: lbu $t1, ($t0)
addiu $t0, $t0, 1
bgtz $t1, petla
sb $zero, -2($t0)
#Wyswietlenei zapytania o opcje
li $v0, 4
la $a0, tekst3
syscall
#wczytanie opcji
li $v0, 5
syscall
move $s5, $v0
#otwarcie pliku obraz
li $v0, 13
la $a0, plik
li $a1, 0
syscall
#zapis scizki do obraz do s0
move $s0, $v0
#otwieram plik wynikowy
li $v0, 13
la $a0, wynik
li $a1, 1
syscall
#zapis sciezki do obrazu wynikowego w s7
move $s7, $v0
#czytanie z pliku
li $v0, 14
move $a0, $s0
la $a1, buf
la $a2, 14
syscall
#wskaznik na buf w t0
la $t0, buf
#czytam offset
addiu $t0, $t0, 10
lwr $t1, ($t0)
#li $v0, 1
#move $a0, $t1
#syscall
#zapisuje offset w s1
subiu $s1, $t1, 14
#zapisuje do pliku wynikowego
li $v0, 15
move $a0, $s7
la $a1, buf
li $a2, 14
syscall
#wczytuje kolejne znaki
li $v0, 14
move $a0, $s0
la $a1, buf
la $a2, 4000
syscall
la $t0, buf
#wczytauje wielkosc mapy
addiu $t0, $t0, 20
lwr $t1, ($t0)
#li $v0, 1
#move $a0, $t1
#syscall
#zapisuje wielkosc mapy w s2
subiu $s2, $t1, 4014
#obliczenie liczby powtorzen petli wczytywania
div $s2, $s2, 4000
addiu $s2, $s2, 1
#li $v0, 1
#move $a0, $s2
#syscall
#skok jesli histogram
beq $s5, 2, histogram
####przeksztalcenie pierwzego bufora
la $t0, buf
addu $t0, $t0, $s1
#wyswietlenie zapytania o kontrast
li $v0, 4
la $a0, tekst1
syscall
#wczytanie kontrastu do s6
li $v0, 5
syscall
move $s6, $v0
#obliczenie wspolczynika i zapisanie w s6
move $t7, $s6
add $s6, $s6, 255
mul $s6, $s6, 259
li $t6, 259
sub $t7, $t6, $t7
mul $t7, $t7, 255
sll $s6, $s6, 12
sll $t7, $t7, 6
div $s6, $s6, $t7
#obliczenie licznika petli
li $t1, 4000
subu $t1, $t1, $s1
petla_1:
lbu $t7, ($t0)
sub $t7, $t7, 128
sll $t7, $t7, 6
mul $t7, $t7, $s6
sra $t7, $t7, 12
add $t7, $t7, 128
#sprawdzenie
blt $t7, 255, spr
la $t7, 255
spr: bgtz $t7, zapisz
la $t7, 0
zapisz:
sb $t7, ($t0)
addiu $t0, $t0, 1
subiu $t1, $t1, 1
bgtz $t1, petla_1
#zapis do pliku wynikowego
li $v0, 15
move $a0, $s7
la $a1, buf
li $a2, 4000
syscall
##petla wczytywania i przeksztalcenia
petla_2:
li $v0, 14
move $a0, $s0
la $a1, buf
li $a2, 4000
syscall
li $t2, 4000
la $t0, buf
petla_wew:
lbu $t7, ($t0)
sub $t7, $t7, 128
sll $t7, $t7, 6
mul $t7, $t7, $s6
sra $t7, $t7, 12
add $t7, $t7, 128
#sprawdzenie
blt $t7, 255, spr1
la $t7, 255
spr1: bgtz $t7, zapisz1
la $t7, 0
zapisz1:
sb $t7, ($t0)
addiu $t0, $t0, 1
subiu $t2, $t2, 1
bgtz $t2, petla_wew
li $v0, 15
move $a0, $s7
la $a1, buf
li $a2, 4000
syscall
subiu $s2, $s2, 1
bgtz $s2, petla_2
#zamkniecie plikow
li $v0, 16
move $a0, $s0
syscall
move $a0, $s7
syscall
#koniec programu
li $v0, 10
syscall
histogram:
#przeszukanie pierwszego bufora
la $t0, buf
addu $t0, $t0, $s1
#obliczenie licznika petli
li $t1, 3999
subu $t1, $t1, $s1
lbu $t7, ($t0)
move $s4, $t7
move $s5, $t7
addiu $t0, $t0, 1
#sprawdzenie pierwszego bufora
petla_h1:
lbu $t7, ($t0)
beqz $t7, dalej
bgt $t7, $s5, spr_h
move $s5, $t7
spr_h: blt $t7, $s4, dalej
move $s4, $t7
dalej: addiu $t0, $t0, 1
subiu $t1, $t1, 1
bgtz $t1, petla_h1
move $t4, $s2
#sprawdzenie reszty
petla_h2:
li $v0, 14
move $a0, $s0
la $a1, buf
li $a2, 4000
syscall
li $t2, 4000
la $t0, buf
petla_hwew:
lbu $t7, ($t0)
beqz $t7, dalej1
bltu $t7, $s4, spr_h1
move $s4, $t7
spr_h1: bgtu $t7, $s5, dalej1
move $s5, $t7
dalej1: addiu $t0, $t0, 1
subiu $t2, $t2, 1
bgtz $t2, petla_hwew
subiu $t4, $t4, 1
bgtz $t4, petla_h2
#obliczenie wspolcznynikow przeksztalcenia
sub $s4, $s4, $s5
li $t5, 255
sll $t5, $t5, 12
sll $s4, $s4, 6
div $s4, $t5, $s4
#debug
li $v0, 1
move $a0, $s4
syscall
###przeksztalcenie obrazu
#ponowne otwarcie
li $v0, 16
move $a0, $s0
syscall
#otwarcie pliku obraz
li $v0, 13
la $a0, plik
li $a1, 0
syscall
move $s0, $v0
#czytanie z pliku
li $v0, 14
move $a0, $s0
la $a1, buf
la $a2, 14
syscall
#czytanie z pliku
li $v0, 14
move $a0, $s0
la $a1, buf
la $a2, 4000
syscall
la $t0, buf
addu $t0, $t0, $s1
#obliczenie licznika petli
li $t1, 4000
subu $t1, $t1, $s1
##przeksztalcenie pierwszego bufora
petla_zmien1:
lbu $t7, ($t0)
sub $t7, $t7, $s5
sll $t7, $t7, 6
mul $t7, $t7, $s4
sra $t7, $t7, 12
sb $t7, ($t0)
addiu $t0, $t0, 1
subiu $t1, $t1, 1
bgtz $t1, petla_zmien1
#zapis do pliku wynikowego
li $v0, 15
move $a0, $s7
la $a1, buf
li $a2, 4000
syscall
##przeksztalcenie kolejnych buforow
petla_zmien2:
li $v0, 14
move $a0, $s0
la $a1, buf
li $a2, 4000
syscall
li $t2, 4000
la $t0, buf
petla_zmienwew:
lbu $t7, ($t0)
sub $t7, $t7, $s5
sll $t7, $t7, 6
mul $t7, $t7, $s4
sra $t7, $t7, 12
sb $t7, ($t0)
addiu $t0, $t0, 1
subiu $t2, $t2, 1
bgtz $t2, petla_zmienwew
li $v0, 15
move $a0, $s7
la $a1, buf
li $a2, 4000
syscall
subiu $s2, $s2, 1
bgtz $s2, petla_zmien2
#zamkniecie plikow
li $v0, 16
move $a0, $s0
syscall
move $a0, $s7
syscall
#koniec progrmu
li $v0, 10
syscall