Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Sprawozdanie: 3
- grupa: i
- Imiona i nazwiska twórców: Artur Bauer i Dominik Busko
- Data zajec laboratoryjnych: 02-11-2017
- Numer sprawozdania: 3
- 1.
- .include "m32def.inc" ;plik naglowkowy
- ldi r16, q7(-0.145) ;przypisanie wartosci -0.145 do rejestru r16
- ldi r17, q7(0.789) ;przypisanie wartosci 0.789 do rejestru r17
- fmulsu r16, r17 ;operacja mnozenia liczby ze znakiem - zapisanej w r16 - z liczba bez znaku - zapisanej w r17 - Wynik na rejestrach r01:r00
- ;zapalenie flagi C oznacza wynik ujemny
- ;wynik w postaci binarnej wynosi (pozwolilem sobie pogrupowac w zestawy cyfr po 4)
- ;r01:r00 1111 0001 0010 1000
- ;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)
- ;-0.145*0.789 = -0.114405 (obliczone na kalkulatorze)
- ;wynik jest calkiem zblizony do rezultatu mnozenia
- start: ;zapetlenie uC
- rjmp start ;zapetlenie uC
- 2.
- .include "m32def.inc" ;plik naglowkowy
- ldi r16, 100 ;przypisanie wartosci 100 do rejestru r16
- ldi r17, (1<<7)+q7(0.11) ;przypisanie wartosci 1.11 do rejestru r17
- fmul r16,r17 ;mnozenie wartosci r16*r17 - gdzie r16 jest zamienane na wartosc 0.78125 (0110 0100)
- ;wynik to 0110 1110 1111 0000 = 0.8671875 wynik odczywany jako zmiennoprzecinkowa wartosc
- ;taka sama wartosc wychodzi przy mnozeniu na kalkulatorze 1.11*0.78125
- ldi r16, -100
- fmulsu r16, r17 ;mnozenie wartosci r16*r17 - gdzie r16 jest zamienane na wartosc -0.78125 (1001 1100)
- ;flada C oznacza wynik ujemny
- ;wynik to 1001 0001 0001 0000 = -0.8666992188 wynik odczywany jako zmiennoprzecinkowa wartosc
- ;na kalkulatorze 1.11*(-0.78125) = -0.8449875
- start: ;zapetlenie uC
- rjmp start ;zapetlenie uC
- 3.
- .include "m32def.inc" ;plik naglowkowy
- ldi r25, 0xFF
- ldi r24, 0xFF
- out DDRA, r25
- out DDRB, r24 ;ustawienie trybu pracy portow A oraz B jako wyjscie
- ldi r24, ~0b10010110 ;[operacja alu] negacja bitów, wynik to 105
- ldi r25, 104+11 ;[operacja alu] suma arytmetyczna, wynik to 115
- mov r0, r25
- mov r1, r24 ;przeniesienie wynikow na rejestru r0,r1
- ldi r24, 27%4 ;[operacja alu] reszta z dzielenia. wynik wynosi 3
- ldi r25, 2==3 ;[operacja alu] 2 nie rowne 3, wynik to falsz (0)
- ldi r24, 0x1&&0x1 ;[operacja alu] iloczyn logiczny wyrazen, wynik, to 1
- ldi r25, !0xFF ;[operacja alu] negacja logiczna, wynik to 0x00
- movw r25:r24,r1:r0 ;przeniesienie wyniku z r1:r0 do r25:r24
- sbiw r25:r24, 50
- 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)
- out PORTA, r24
- out PORTB, r25 ;wyswietlenie wyniku na portach A oraz B, odpowiednio rejestrow r24, r25
- start: ;zapetlenie uC
- rjmp start ;zapetlenie uC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement