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