Advertisement
Guest User

Untitled

a guest
Nov 2nd, 2018
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     .data
  2. buff:       .space 4
  3. offset:     .space 4
  4. size:       .space 4
  5. width:      .space 4
  6. height:     .space 4
  7. poczatek:   .space 4
  8. aparam:     .space 4
  9. bparam:     .space 4
  10. cparam:     .space 4
  11. dparam:     .space 4
  12.  
  13. msgIntro:   .asciiz " Rysowanie wielomianu trzeciego stopnia \n"
  14. msgGetParams:   .asciiz " Podaj parametry a, b, c oraz d dla funkcji ax^3 + bx^2 + cx + d\n"
  15. msgTemp:    .asciiz "Wczytano: "
  16. msgFileExc: .asciiz "Blad zwiazany z plikiem\n"
  17. fileNameIn: .asciiz "./in.bmp"
  18. fileNameOut:    .asciiz "./out.bmp"
  19.     .text
  20. main:
  21.     la $a0, msgIntro
  22.     li $v0, 4
  23.     syscall
  24. readFile:
  25.     la $a0, fileNameIn
  26.     li $a1, 0
  27.     li $a2, 0
  28.     li $v0, 13
  29.     syscall
  30.    
  31.     move $v0, $t0
  32.     bltz $t0, fileExc
  33.    
  34.     #czytamy 2 bajty 'BM'
  35.     move $a0, $t0
  36.     la $a1, buff
  37.     li $a2, 2
  38.     li $v0, 14
  39.     syscall
  40.     #czytamy 4 bajty okreslajace rozmiar pliku
  41.     move $a0, $t0
  42.     la $a1, size
  43.     li $a2, 4
  44.     li $v0, 14
  45.     syscall
  46.    
  47.     lw $s0, size
  48.     move $a0, $s0
  49.     li $v0, 1
  50.     syscall
  51.     #alokacja
  52.     move $a0, $s0
  53.     li $v0, 9
  54.     syscall
  55.    
  56.     move $s1, $v0 #poczatek adresu zaalokowanej pamieci
  57.     sw $s1, poczatek
  58.    
  59.     # 4 bajty zarezerwowane
  60.     move $a0, $t0
  61.     la $a1, buff
  62.     li $a2, 4
  63.     li $v0, 14
  64.     syscall
  65.    
  66.     #offset
  67.     move $a0, $t0
  68.     la $a1, offset
  69.     li $a2, 4
  70.     li $v0, 14
  71.     syscall
  72.    
  73.    
  74.     # naglowek informacyjny
  75.     move $a0, $t0
  76.     la $a1, buff
  77.     li $a2, 4
  78.     li $v0, 14
  79.     syscall
  80.    
  81.     # szerokosc
  82.     move $a0, $t0
  83.     la $a1, width
  84.     li $a2, 4
  85.     li $v0, 14
  86.     syscall
  87.    
  88.     lw $s2, width
  89.    
  90.     # wysokosc
  91.     move $a0, $t0
  92.     la $a1, height
  93.     li $a2, 4
  94.     li $v0, 14
  95.     syscall
  96.    
  97.     lw $s3, height
  98.    
  99.     # close file
  100.     move $a0, $t0
  101.     li $v0, 16
  102.     syscall
  103. readBytes:
  104.     la $a0, fileNameIn
  105.     la $a1, 0
  106.     la $a2, 0
  107.     li $v0, 13
  108.     syscall
  109.    
  110.     move $t0, $v0
  111.    
  112.     move $a0, $t0
  113.     la $a1, ($s1)
  114.     la $a2, ($s0)
  115.     li $v0, 14
  116.     syscall
  117.    
  118.     lw $s0, size
  119.    
  120.     move $a0, $t0
  121.     li $v0, 16
  122.     syscall
  123. getParams:
  124.     la $a0, msgGetParams
  125.     li $v0, 4
  126.     syscall
  127.     # Pobranie parametrow funkcji od uzytkownika
  128.     li $v0, 5
  129.     syscall
  130.     sw $v0, aparam
  131.    
  132.     li $v0, 5
  133.     syscall
  134.     sw $v0, bparam
  135.    
  136.     li $v0, 5
  137.     syscall
  138.     sw $v0, cparam
  139.    
  140.     li $v0, 5
  141.     syscall
  142.     sw $v0, dparam
  143. paddingCheck:
  144.     li $t7, 4
  145.     mul $t6, $s2, 3
  146.     divu $t6, $t7
  147.     mfhi $t7
  148. startSettings:
  149.     li $t5, 1 # licznik narysowanych punktow - na koncu bedzie rowny ilosci pixeli na szerokosc (width)
  150.    
  151.     li $t6, 2
  152.     divu $s2, $t6
  153.     mflo $s6 # dzielimy szerokosc na 2 - w srodku bedzie srodek ukladu
  154.     li $t8, -1
  155.     mul $s6, $s6, $t8 # od -szerokosc/2 zaczynamy liczyc wartosci funkcji
  156.    
  157.     # to samo dla wysokosci - szukamy srodka
  158.     li $t6, 2
  159.     divu $s3, $t6
  160.    
  161.    
  162.     mflo $s0
  163. processChart:
  164.     beq $t5, $s2, saveFile
  165.    
  166.     lw $t0, aparam
  167.     lw $t1, bparam
  168.     lw $t2, cparam
  169.     lw $t3, dparam
  170.     li $t4, 400000 # tak bedziemy skalowac funkcje ( dzielac przez t4)
  171.     move $t8, $t0
  172.     mul $t8, $t8, $s6
  173.     mul $t8, $t8, $s6
  174.     mul $t8, $t8, $s6 # ax^3
  175.    
  176.     move $t9, $t1
  177.     mul $t9, $t9, $s6
  178.     mul $t9, $t9, $s6
  179.     add $t8, $t8, $t9 # + bx^2
  180.    
  181.     move $t9, $t2
  182.     mul $t9, $t9, $s6
  183.     add $t8, $t8, $t9 # + cx
  184.    
  185.     add $t8, $t8, $t3 # + d
  186.    
  187.     div $t8, $t4 # skalowanie
  188.     mflo $t8
  189.     add $t8, $t8, $s0 # s0 - srodek obrazka (wysokosc)
  190.     move $t9, $s6 # ustawienie t9
  191.    
  192.     addi $t5, $t5, 1 # inkrementujemy liczink pikseli
  193.     addi $s6, $s6, 1 # dodajemy 1 - w nastepnym kroku bedziemy przetwarzali pixel o "argumencie" $s6 + 1
  194. findPixel:
  195.     # s1 - adres zaalokowanej pamieci (poczatek)
  196.     # s2 - szerokosc (width)  s3 - wysokosc (height)  s5 - offset
  197.     # t8 - ktory pixel od dolu # t9 - ktory pixel od lewej
  198.     lw $s1, poczatek
  199.     lw $s5, offset
  200.     addu $s1, $s1, $s5
  201.     mul $t9, $t9, 3 # ktory bajt od lewej
  202.     addu $s1, $s1, $t9
  203.     mul $t9, $s2, 3
  204. goHorizontal:
  205.     beq $t8, $zero, setColour
  206.     subi $t8, $t8, 1
  207.     addu $s1, $s1, $t9 # dodanie szerokosci*3 (ilosc bajtow)
  208. padding:
  209.     beq $t7, 0, goHorizontal
  210.     beq $t7, 1, padding1
  211.     beq $t7, 2, padding2
  212.     beq $t7, 3, padding3
  213. padding1:
  214.     addi $s1, $s1, 1
  215.     b goHorizontal
  216. padding2:
  217.     addi $s1, $s1, 2
  218.     b goHorizontal
  219. padding3:
  220.     addi $s1, $s1, 3
  221.     b goHorizontal
  222. setColour:
  223.     li $t0, 0xFF
  224.     sb $t0, ($s1)
  225.     addi $s1, $s1, 1
  226.    
  227.     sb $t0, ($s1)
  228.     addi $s1, $s1, 1
  229.    
  230.     sb $t0, ($s1)
  231.     addi $s1, $s1, 1
  232.     la $a0, msgIntro
  233.     li $v0, 4
  234.     syscall
  235.     b processChart
  236. saveFile:
  237.     la $a0, fileNameOut
  238.     li $a1, 1
  239.     li $a2, 0
  240.     li $v0, 13
  241.     syscall
  242.    
  243.     move $t0, $v0
  244.    
  245.     bltz $t0, fileExc
  246.     lw $s0, size
  247.     lw $s1, poczatek
  248.    
  249.     move $a0, $t0
  250.     la $a1, ($s1)
  251.     la $a2, ($s0)
  252.     li $v0, 15
  253.     syscall
  254.    
  255.     move $a0, $t0
  256.     li $v0, 16
  257.     syscall
  258.    
  259.     b end
  260. fileExc:
  261.     la $a0, msgFileExc
  262.     li $v0, 4
  263.     syscall
  264. end:
  265.     li $v0, 10
  266.     syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement