Advertisement
ArBa

sprawko 2

Nov 7th, 2017
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Sprawozdanie: 3
  2. grupa: i
  3. Imiona i nazwiska twórców: Artur Bauer i Dominik Busko
  4. Data zajec laboratoryjnych: 02-11-2017
  5. Numer sprawozdania: 3
  6.  
  7.  
  8. 1.
  9. .include "m32def.inc"   ;plik naglowkowy
  10. ldi r16, q7(-0.145)     ;przypisanie wartosci -0.145 do rejestru r16
  11. ldi r17, q7(0.789)  ;przypisanie wartosci 0.789 do rejestru r17
  12.  
  13. fmulsu r16, r17     ;operacja mnozenia liczby ze znakiem - zapisanej w r16 - z liczba bez znaku - zapisanej w r17 - Wynik na rejestrach r01:r00
  14. ;zapalenie flagi C oznacza wynik ujemny
  15.  
  16. ;wynik w postaci binarnej wynosi (pozwolilem sobie pogrupowac w zestawy cyfr po 4)
  17. ;r01:r00    1111 0001 0010 1000
  18. ;wynik w postaci z decymalnej to -1+(1/2)^1+(1/2)^2+(1/2)^3+(1/2)^7+(1/2)^10+(1/2)^12 = -0.1159667969 (obliczone z tego wzoru na kalkulatorze)
  19. ;-0.145*0.789 = -0.114405 (obliczone na kalkulatorze)
  20. ;wynik jest calkiem zblizony do rezultatu mnozenia
  21.  
  22. start:          ;zapetlenie uC
  23.     rjmp start      ;zapetlenie uC
  24.  
  25.  
  26. 2.
  27. .include "m32def.inc"       ;plik naglowkowy
  28. ldi r16, 100            ;przypisanie wartosci 100 do rejestru r16
  29. ldi r17, (1<<7)+q7(0.11)    ;przypisanie wartosci 1.11 do rejestru r17
  30.  
  31. fmul r16,r17            ;mnozenie wartosci r16*r17 - gdzie r16 jest zamienane na wartosc 0.78125 (0110 0100)
  32. ;wynik to 0110 1110 1111 0000 = 0.8671875 wynik odczywany jako zmiennoprzecinkowa wartosc
  33. ;taka sama wartosc wychodzi przy mnozeniu na kalkulatorze 1.11*0.78125
  34.  
  35. ldi r16, -100
  36.  
  37. fmulsu r16, r17 ;mnozenie wartosci r16*r17 - gdzie r16 jest zamienane na wartosc -0.78125 (1001 1100)
  38. ;flada C oznacza wynik ujemny
  39. ;wynik to 1001 0001 0001 0000 = -0.8666992188  wynik odczywany jako zmiennoprzecinkowa wartosc
  40. ;na kalkulatorze 1.11*(-0.78125) = -0.8449875
  41.  
  42. start:          ;zapetlenie uC
  43.     rjmp start      ;zapetlenie uC
  44.  
  45. 3.
  46. .include "m32def.inc"       ;plik naglowkowy
  47.  
  48. ldi r25, 0xFF
  49. ldi r24, 0xFF
  50. out DDRA, r25
  51. out DDRB, r24       ;ustawienie trybu pracy portow A oraz B jako wyjscie
  52.  
  53. ldi r24, ~0b10010110    ;[operacja alu] negacja bitów, wynik to 105
  54. ldi r25, 104+11     ;[operacja alu] suma arytmetyczna, wynik to 115
  55.  
  56. mov r0, r25
  57. mov r1, r24     ;przeniesienie wynikow na rejestru r0,r1
  58.  
  59.  
  60. ldi r24, 27%4       ;[operacja alu] reszta z dzielenia. wynik wynosi 3
  61. ldi r25, 2==3       ;[operacja alu] 2 nie rowne 3, wynik to falsz (0)
  62. ldi r24, 0x1&&0x1   ;[operacja alu] iloczyn logiczny wyrazen, wynik, to 1
  63. ldi r25, !0xFF      ;[operacja alu] negacja logiczna, wynik to 0x00
  64.  
  65.  
  66. movw r25:r24,r1:r0  ;przeniesienie wyniku z r1:r0 do r25:r24
  67. sbiw r25:r24, 50
  68. sbiw r25:r24, 50    ;odejmowanie 100 w 2 krokach, z powodu przekroczenia zasiegu 0<=K<=63 (dokumentacja: http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_SBIW.html)
  69.  
  70. out PORTA, r24
  71. out PORTB, r25      ;wyswietlenie wyniku na portach A oraz B, odpowiednio rejestrow r24, r25
  72.  
  73.  
  74. start:  ;zapetlenie uC
  75.     rjmp start  ;zapetlenie uC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement