Operacje logiczne, Cykl wykonania rozkazu, Tryby adresacji, Skoki
Transkrypt
Operacje logiczne, Cykl wykonania rozkazu, Tryby adresacji, Skoki
Operacje logiczne, Cykl wykonania rozkazu, Tryby adresacji, Skoki Cel: Celem ćwiczenia jest poznanie podstawowych operacji logicznych, trybów adresacji, realizacji warunków logicznych i podprogramów. Uwagi : 1. Przy realizacji poniższych zadań podobnie jak poprzedni należy skorzystać ze środowiska AVR Studio. Tworząc nowy projekt należy pamiętać o wyborze kontrolera ATMEGA32 symulatora jako środowiska do uruchomienia programu. 2. Na początku programu załaduj bibliotekę z definicją nazw rejestrów procesora: .INCLUDE "m32def.inc" Operacje logiczne na bitach Proszę przeanalizować stan rejestrów przed i po wykonaniu poszczególnych rozkazów ; przykład maskowania bitów rejestru R16 rejestru, maska 0x0F znajduje się w rejestrze R16 ldi R16,0xAA ldi R17, 0x0F and R16, R17 ; Zwróć uwagę na stan flag po wykonaniu rozkazu: and ; Maskowanie zer przebiega podobnie ldi R16,0xAA ldi R17, 0x0F or R16, R17 ; Wskaż która część bajtu przeszła przez maskę ? ; Znajdywanie różnic pomiędzy wartościami ldi R16, 0b10110101 ldi R17, 0b11011100 eor R16, R17 ; Jaki skutek ma wykonanie rozkazu Organizacja programu, tryby adresacji Wykonaj poniższy program, bacznie obserwując jakie wartości adresów zostały przypisane do etykiet. .INCLUDE "m32def.inc" .EQU AdresWyniku = 0x0060 .DSEG .org AdresWyniku .BYTE 10 ; dołącz plik nagłówkowy dla ATmega32 ; .CSEG ; SEGMENT PROGRAMU .ORG 0x0000 ; ; ; ; ; nop PC po resecie ma wartość 0x0000 dlatego od tego miejsca procesor zaczyna wykonywanie programu ile cykli trwa wykonie takiego rozkazu. Sprawdź kod operacyjny tego rozkazu z listą rozkazów nop nop nop rjmp Dalej1 Dalej1: .org 0x0020 nop jmp 0x0030 ; Kolejne lokacje to adresy obsługi przerwań, można jest ; zatem ominąć ; ; Skok względem PC powoduje ; PC <- PC + przesunięcie_k + 1 ; ponieważ PC = 0x0004 a trzeba skoczyć do 0x0020 ;to przesunięcie wynosi: ; 0x0020 - PC - 1 = 1B ; Porównaj z kodem rozkazu rjmp k ; ; oczywiście można to zrobić skokiem bezwzględnym ; Wpisz odpowiedni adres Dalej2: .org 0x0030 ; Tryby adresacji ldi R17, 0xfa ; adresowanie natychmiastowe, ; sprawdź w jaki sposób umieszczono operandy ; w kodzie operacyjnym rozkazu (jak go zakodowano) ; sprawdź działanie wybranych 3 trybów adresacji ; Operacje logiczne zastosowane do zerowania rejestrów ldi R16,0xFF eor R16, R16 ldi R16, 0xFF clr R16 ;to samo dedykowanym rozkazem ; Operacje porównania ldi R16, 10 ldi R17, 20 cp R16, R17 breq Rowne ; ; ; ; rozkaz wykonuje odejmowanie R16 - R17, ale nie zmienia R16 ustawia jedynie flagi, których stan testują rozkazy bcxx zanotuj ich stan i wskaż które z niech testują rozkazy: brge WiekszeRowne nop Rowne: nop WiekszeRowne: nop ; o przeniesieniu sterowania do innego miejsca mogą także decydować pojedyncze bity sbic PortA,0 rjmp UstawionyBitPortuA0 WyzerowanyBitPortuA0: ; to sie wykona gdy bit wyzerowany nop UstawionyBitPortuA0: ; to gdy nie nop ;Pętle programowe ldi R16, 10 ; licznik ldi R17, 1 ; krok Petla1: sub R16,R17 brne Petla1 ldi R16, 10 clr R1 ; wartość do kórej liczymy ; zerowanie licznika inc R1 cp R16, R1 brne Petla2 ; zwiększ licznik ; porównaj Petla2: ;Pętla programowa do kopiowania obszaru pamieci ;Dane umieszczone w pamięci programu od adresu AdresDanych sa przenoszone ;do pamiecie danych o adresie AdresWyniku ldi ZH, high(AdresDanych<<1) ldi ZL, low(AdresDanych<<1) ldi XH, high(AdresWyniku) ldi XL, low(AdresWyniku) KopiujDalej: lpm R16, Z+ ;and R16, R17 st X+, R16 cpi R16, '2' brne KopiujDalej ; załaduj jeden bajt z pamieci programu i zwiększ o jeden ; zamaskuj odpowiedni bit ; Znak końca tekstu ; Jeśli różne zamianę Petla: rjmp Petla AdresDanych: ; przykładowa tablica. .DB 'A','l','a','m','a','k','o','t','a' .DB "Tola ma psa 2" ; Uwaga dane są przechowywane jako liczby 16 bitowe Pętle programowe Asembler tego kontrolera nie posiada pętli sprzętowych ale można je łatwo zrealizować wykorzystując rozkazy skoków warunkowych Petla1: cpi R16, 10 ; Znak końca tekstu brne Petla ; Jeśli różne zamianę rjmp Petla ; pętla nieskończona Petla: Sprawdź działanie pętli zastępując odejmowanie rozkazem dekrementacji. Ile razy w tym przypadku wykona się pętla. Zadania Zadanie 1. Napisz program zamieniający dowolny tekst w kodzie ASCII na pisany dużymi literami. Zadanie 2. Zamieniający małe litery na duże a duże na małe. Tekst do zamiany umieść w pamięci RAM od adresu Zadanie 3. Napisz program zamiany spakowanej liczy w kodzie BCD na kod ASCII. Zadanie 4. Napisz program przepisujący zawartość pamięci programu do pamięci danych od lokacji 0x0080