Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .data
- buff: .space 4
- offset: .space 4
- size: .space 4
- width: .space 4
- height: .space 4
- poczatek: .space 4
- aparam: .space 4
- bparam: .space 4
- cparam: .space 4
- dparam: .space 4
- msgIntro: .asciiz " Rysowanie wielomianu trzeciego stopnia \n"
- msgGetParams: .asciiz " Podaj parametry a, b, c oraz d dla funkcji ax^3 + bx^2 + cx + d\n"
- msgTemp: .asciiz "Wczytano: "
- msgFileExc: .asciiz "Blad zwiazany z plikiem\n"
- fileNameIn: .asciiz "./in.bmp"
- fileNameOut: .asciiz "./out.bmp"
- .text
- main:
- la $a0, msgIntro
- li $v0, 4
- syscall
- readFile:
- la $a0, fileNameIn
- li $a1, 0
- li $a2, 0
- li $v0, 13
- syscall
- move $v0, $t0
- bltz $t0, fileExc
- #czytamy 2 bajty 'BM'
- move $a0, $t0
- la $a1, buff
- li $a2, 2
- li $v0, 14
- syscall
- #czytamy 4 bajty okreslajace rozmiar pliku
- move $a0, $t0
- la $a1, size
- li $a2, 4
- li $v0, 14
- syscall
- lw $s0, size
- move $a0, $s0
- li $v0, 1
- syscall
- #alokacja
- move $a0, $s0
- li $v0, 9
- syscall
- move $s1, $v0 #poczatek adresu zaalokowanej pamieci
- sw $s1, poczatek
- # 4 bajty zarezerwowane
- move $a0, $t0
- la $a1, buff
- li $a2, 4
- li $v0, 14
- syscall
- #offset
- move $a0, $t0
- la $a1, offset
- li $a2, 4
- li $v0, 14
- syscall
- # naglowek informacyjny
- move $a0, $t0
- la $a1, buff
- li $a2, 4
- li $v0, 14
- syscall
- # szerokosc
- move $a0, $t0
- la $a1, width
- li $a2, 4
- li $v0, 14
- syscall
- lw $s2, width
- # wysokosc
- move $a0, $t0
- la $a1, height
- li $a2, 4
- li $v0, 14
- syscall
- lw $s3, height
- # close file
- move $a0, $t0
- li $v0, 16
- syscall
- readBytes:
- la $a0, fileNameIn
- la $a1, 0
- la $a2, 0
- li $v0, 13
- syscall
- move $t0, $v0
- move $a0, $t0
- la $a1, ($s1)
- la $a2, ($s0)
- li $v0, 14
- syscall
- lw $s0, size
- move $a0, $t0
- li $v0, 16
- syscall
- getParams:
- la $a0, msgGetParams
- li $v0, 4
- syscall
- # Pobranie parametrow funkcji od uzytkownika
- li $v0, 5
- syscall
- sw $v0, aparam
- li $v0, 5
- syscall
- sw $v0, bparam
- li $v0, 5
- syscall
- sw $v0, cparam
- li $v0, 5
- syscall
- sw $v0, dparam
- paddingCheck:
- li $t7, 4
- mul $t6, $s2, 3
- divu $t6, $t7
- mfhi $t7
- startSettings:
- li $t5, 1 # licznik narysowanych punktow - na koncu bedzie rowny ilosci pixeli na szerokosc (width)
- li $t6, 2
- divu $s2, $t6
- mflo $s6 # dzielimy szerokosc na 2 - w srodku bedzie srodek ukladu
- li $t8, -1
- mul $s6, $s6, $t8 # od -szerokosc/2 zaczynamy liczyc wartosci funkcji
- # to samo dla wysokosci - szukamy srodka
- li $t6, 2
- divu $s3, $t6
- mflo $s0
- processChart:
- beq $t5, $s2, saveFile
- lw $t0, aparam
- lw $t1, bparam
- lw $t2, cparam
- lw $t3, dparam
- li $t4, 400000 # tak bedziemy skalowac funkcje ( dzielac przez t4)
- move $t8, $t0
- mul $t8, $t8, $s6
- mul $t8, $t8, $s6
- mul $t8, $t8, $s6 # ax^3
- move $t9, $t1
- mul $t9, $t9, $s6
- mul $t9, $t9, $s6
- add $t8, $t8, $t9 # + bx^2
- move $t9, $t2
- mul $t9, $t9, $s6
- add $t8, $t8, $t9 # + cx
- add $t8, $t8, $t3 # + d
- div $t8, $t4 # skalowanie
- mflo $t8
- add $t8, $t8, $s0 # s0 - srodek obrazka (wysokosc)
- move $t9, $s6 # ustawienie t9
- addi $t5, $t5, 1 # inkrementujemy liczink pikseli
- addi $s6, $s6, 1 # dodajemy 1 - w nastepnym kroku bedziemy przetwarzali pixel o "argumencie" $s6 + 1
- findPixel:
- # s1 - adres zaalokowanej pamieci (poczatek)
- # s2 - szerokosc (width) s3 - wysokosc (height) s5 - offset
- # t8 - ktory pixel od dolu # t9 - ktory pixel od lewej
- lw $s1, poczatek
- lw $s5, offset
- addu $s1, $s1, $s5
- mul $t9, $t9, 3 # ktory bajt od lewej
- addu $s1, $s1, $t9
- mul $t9, $s2, 3
- goHorizontal:
- beq $t8, $zero, setColour
- subi $t8, $t8, 1
- addu $s1, $s1, $t9 # dodanie szerokosci*3 (ilosc bajtow)
- padding:
- beq $t7, 0, goHorizontal
- beq $t7, 1, padding1
- beq $t7, 2, padding2
- beq $t7, 3, padding3
- padding1:
- addi $s1, $s1, 1
- b goHorizontal
- padding2:
- addi $s1, $s1, 2
- b goHorizontal
- padding3:
- addi $s1, $s1, 3
- b goHorizontal
- setColour:
- li $t0, 0xFF
- sb $t0, ($s1)
- addi $s1, $s1, 1
- sb $t0, ($s1)
- addi $s1, $s1, 1
- sb $t0, ($s1)
- addi $s1, $s1, 1
- la $a0, msgIntro
- li $v0, 4
- syscall
- b processChart
- saveFile:
- la $a0, fileNameOut
- li $a1, 1
- li $a2, 0
- li $v0, 13
- syscall
- move $t0, $v0
- bltz $t0, fileExc
- lw $s0, size
- lw $s1, poczatek
- move $a0, $t0
- la $a1, ($s1)
- la $a2, ($s0)
- li $v0, 15
- syscall
- move $a0, $t0
- li $v0, 16
- syscall
- b end
- fileExc:
- la $a0, msgFileExc
- li $v0, 4
- syscall
- end:
- li $v0, 10
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement