Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- inputFile: .asciiz "input.bmp"
- outputFile: .asciiz "output.bmp"
- header: .align 2
- .space 54
- width: .align 2
- .word
- height: .align 2
- .word
- offset: .align 2
- .word
- .text
- #OTWORZ PLIK
- li $v0, 13
- la $a0, inputFile
- li $a1, 0
- li $a2, 0
- syscall
- move $t0, $v0
- #CZYTAJ Z PLIKU BMP
- move $a0, $t0
- la $a1, header
- li $a2, 54
- li $v0, 14
- syscall
- lh $t7, header+18#szerokosc
- sw $t7, width #przechowujemy szerokoϾ w RAMie
- lh $t6, header+22#wysokosc
- sw $t6, height #przechowujemy wysokoϾ w RAMie
- mul $t5, $t7, $t6#ilosc pixeli
- andi $t4, $t7, 3#offset
- sw $t4, offset #przechowujemy padding w ram
- mul $t5, $t5, 3 #bit *3
- mul $t4, $t4, $t6 #offset * wysokosc
- add $t5, $t5, $t4 #offset size + map size
- move $a0, $t5
- li $v0, 9 #syscall 9 (sbrk)
- syscall
- la $t1, ($v0)
- # t1 - adres bufera bmp
- #CZYTAJ Z PLIKU BMP reszte
- move $a0, $t0
- la $a1, ($t1)
- move $a2, $t5
- li $v0, 14
- syscall
- move $a0, $t0
- li $v0, 16
- syscall
- #############################KOD#####################################
- #czyszczenie rejestrów
- li $t2, 0
- li $t6, 0
- li $t3, 0
- li $t4, 0
- move $t3, $t7 #wczytuje z szeroko?? do rejestru t3
- la $s1, ($t1) #kopiuje adres do $s na razie just in case
- loop_begin:
- lbu $t4, ($t1) #wczytuje do rejestru pyxel (B channel)
- beq $t4, 255, equal_white_w #je?li bia?y
- beq $t4, 0x00, equal_black_w #je?li czarny
- equal_white_w:
- sub $t3, $t3, 1 #odejmuje 1 od szeroko?ci
- beqz $t3, load_next_row #je?eli wysoko?? == 0, ?aduje kolejny wiersz
- addi $t1, $t1, 3 #przesuwa wska?nik pliku na nast?pny pixel
- b loop_begin
- equal_black_w:
- sub $t3, $t3, 1 #odejmuje 1 od szeroko?ci
- addi $t6, $t6, 1 #dodaje 1 do szeroko?ci KWADRATU
- beqz $t3, measure_height #je?eli wysoko?? == 0, ?aduje kolejny wiersz
- addi $t1, $t1, 3 #przesuwa wska?nik pliku na nast?pny pixel
- lbu $t4, ($t1) #wczytuje do rejestru nast?pny pyxel (B channel)
- beq $t4, 0xff, measure_height #je?li bia?y
- b loop_begin
- load_next_row:
- lb $t2, offset #?aduje padding do rejestru $t2
- add $t1, $t1, $t2 #przesuwa wska?nik pliku na pierwszy pixel w nowym wierszu
- li $t3, 0
- move $t3, $t7 #wczytuje z RAMu szeroko?? do rejestru t3
- b loop_begin
- measure_height:
- move $a0, $t6 #wypisz bok kwadratury
- li $v0, 1
- syscall
- circle_specs:
- srl $s3, $t6, 1 #promieñ
- move $s4, $s3, #x0
- move $s5, $s3, #y0
- move_pointer_to_first_black:
- move $t4, $t6 #szerokoϾ kwadratu zapisywana w t4
- loop_mp:
- sub $t1, $t1, 3 #pointer po zmierzeniu szerokoœci jest na koñcu kwadratu
- sub $t4, $t4, 1
- beqz $t4, draw #w pêtli przesuwamy go na pocz¹tix
- b loop_mp
- draw: #rysuje samplix pixel
- #sample#
- li $s7, 0xff
- sb $s7, ($t1)
- #sample#
- la $t3, ($t1)
- ################ liczymy szerokoϾ x 3 + offser ###################
- move $t4, $t7
- add $t7, $t7, $t4 #xdddddddd
- add $t7, $t7, $t4
- add $t7, $t7, $t2
- draw_circle:
- ## variables preparation ##
- li $s2, 0
- sub $s2, $s2, $s3 # x = -r
- li $s6, 0 # y = 0
- li $t4, 0
- sub $t4, $t4, $s3
- sub $t4, $t4, $s3 # -2*r
- li $s7, 2
- add $s7, $s7, $t4 # err = 2 - 2*r
- ############################
- ############### DO ###################
- set_pixel_1:
- sub $t2, $s4, $s2 #xm-x
- add $t4, $s5, $s6 #ym+y
- move $a0, $t2 #argiument X
- move $a1, $t4 #argiument Y
- jal set_pixel #wywo³anie funkcji
- la $t1, ($t3) #wracamy na poczatek kwadratu
- set_pixel_2:
- sub $t2, $s4, $s6 #xm-y
- sub $t4, $s5, $s2 #ym-x
- move $a0, $t2 #argiument X
- move $a1, $t4 #argiument Y
- jal set_pixel #wywo³anie funkcji
- la $t1, ($t3) #wracamy na poczatek kwadratu
- set_pixel_3:
- add $t2, $s4, $s2 #xm+x
- sub $t4, $s5, $s6 #ym-y
- move $a0, $t2 #argiument X
- move $a1, $t4 #argiument Y
- jal set_pixel #set3
- la $t1, ($t3) #wracamy na poczatek kwadratu
- set_pixel_4:
- add $t2, $s4, $s6 #xm+y
- add $t4, $s5, $s2 #ym+x
- move $a0, $t2 #argiument X
- move $a1, $t4 #argiument Y
- jal set_pixel #set3
- la $t1, ($t3) #wracamy na poczatek kwadratu
- ############### ustawienie parametrów i waruneczki #########################3
- move $s3, $s7 # r = err
- beq $s3, $s6 , r_smaller #if (r <= y)
- blt $s3, $s6 , r_smaller #if (r <= y)
- b next_if
- r_smaller:
- addi $s6, $s6, 1 # ++y
- move $t4, $s6
- sll $t4, $t4, 1 # t4 = ++y*2
- addi $t4, $t4, 1 # t4 = ++y*2+1
- add $s7, $s7, $t4 # err += t4
- next_if:
- bgt $s3, $s2, r_greater #r > x
- bgt $s7, $s6, r_greater #err > y
- b end_if
- r_greater:
- addi $s2, $s2, 1 # ++x
- move $t4, $s2
- sll $t4, $t4, 1 # t4 = ++x*2
- addi $t4, $t4, 1 # t4 = ++x*2+1
- add $s7, $s7, $t4 # err += t4
- end_if:
- ##############################################################
- ##################### BIG LOOOP PART ###############
- bloop_begin:
- bltz $s2, bloop
- b end_all
- bloop:
- set_pixel_l1:
- sub $t2, $s4, $s2 #xm-x
- add $t4, $s5, $s6 #ym+y
- move $a0, $t2 #argiument X
- move $a1, $t4 #argiument Y
- jal set_pixel #wywo³anie funkcji
- la $t1, ($t3) #wracamy na poczatek kwadratu
- set_pixel_l2:
- sub $t2, $s4, $s6 #xm-y
- sub $t4, $s5, $s2 #ym-x
- move $a0, $t2 #argiument X
- move $a1, $t4 #argiument Y
- jal set_pixel #wywo³anie funkcji
- la $t1, ($t3) #wracamy na poczatek kwadratu
- set_pixel_l3:
- add $t2, $s4, $s2 #xm+x
- sub $t4, $s5, $s6 #ym-y
- move $a0, $t2 #argiument X
- move $a1, $t4 #argiument Y
- jal set_pixel #set3
- la $t1, ($t3) #wracamy na poczatek kwadratu
- set_pixel_l4:
- add $t2, $s4, $s6 #xm+y
- add $t4, $s5, $s2 #ym+x
- move $a0, $t2 #argiument X
- move $a1, $t4 #argiument Y
- jal set_pixel #set3
- la $t1, ($t3) #wracamy na poczatek kwadratu
- ############### ustawienie parametrów i waruneczki #########################3
- move $s3, $s7 # r = err
- beq $s3, $s6 , r_smaller #if (r <= y)
- blt $s3, $s6 , r_smaller #if (r <= y)
- b next_if
- rl_smaller:
- addi $s6, $s6, 1 # ++y
- move $t4, $s6
- sll $t4, $t4, 1 # t4 = ++y*2
- addi $t4, $t4, 1 # t4 = ++y*2+1
- add $s7, $s7, $t4 # err += t4
- nextl_if:
- bgt $s3, $s2, r_greater #r > x
- bgt $s7, $s6, r_greater #err > y
- b end_if
- rl_greater:
- addi $s2, $s2, 1 # ++x
- move $t4, $s2
- sll $t4, $t4, 1 # t4 = ++x*2
- addi $t4, $t4, 1 # t4 = ++x*2+1
- add $s7, $s7, $t4 # err += t4
- endl_if:
- b bloop_begin
- ##############################################################
- ####################################################
- ############### set pixel function ##################
- set_pixel:
- move_up:
- beqz $a1, move_right
- subi $a1, $a1, 1
- add $t1, $t1, $t7
- b move_up
- move_right:
- beqz $a0, end_s
- subi $a0, $a0, 1
- addi $t1, $t1, 3
- b move_right
- end_s:
- li $t4, 0xff
- sb $t4, ($t1)
- jr $ra
- #########################################################
- end_all:
- ##############################
- #otworz drugi
- li $v0, 13
- la $a0, outputFile
- li $a1, 1
- li $a2, 0
- syscall
- move $t0, $v0
- #zapisz header
- move $a0, $t0
- la $a1, header
- li $a2, 54
- li $v0, 15
- syscall
- #zapisz buffer2
- move $a0, $t0
- la $a1, ($s1) #### tu zmieniæ na t9
- move $a2, $t5
- li $v0, 15
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement