Programowanie w asemblerze


PROCEDURY-WYMIANA INFORMACJI
Procedury są zwykle wywoływane w celu określonej obróbki informacji.
Procedury z reguły wymagają danych do swej pracy czyli parametrów
i generują tzw. wyniki. Sposób wymiany informacji pomiędzy programem wywołującym a
procedurÄ…, tzn.:
a) przekazanie procedurze parametrów;
b) odebranie od niej wyników;
jest uzależniony od szeregu czynników:
" liczby dostÄ™pnych aktualnie rejestrów µP;
" dostępnego obszaru PAO;
" wymaganej szybkości działania;
" typu pamięci programu i danych (ROM czy RAM);
" prostoty wymiany danych;
" uniwersalności;
" wpływu na współużywalność procedury wołającej i wywoływanej.
1. Przekazywanie parametrów/wyników przez rejestry.
Szybki sposób przekazywania niewielkiej ilości danych.
; procedura generująca programowo zadane opóznienie
; parametry: B - czas opóznienia
delay: EX (SP),HL ; 2-krotna zamiana HL [19]
EX (SP),HL ; z wierzchołkiem stosu [19]
DJNZ delay ; dekrement licznika powtórzeń [13/8]
RET ; [10]
; przykład wywołania:
LD B,k ; [7]
CALL delay ; [17] (RST delay ;[11])
czas trwania opóznienia (łącznie z wywołaniem) [w taktach CLK]:
N=(7+17)+(19+19)k+13(k-1)+8+10=51k+29
fosc=2.5MHz k=1 N=80 T=32µs
t=400ns k=0 N=13138 T=5.25ms
1 ^L.J.Grodzki
^
2. Przekazywanie parametrów/wyników przez rejestry pośrednio.
W rejestrach przekazuje się adresy np. początków obszarów zawierających potrzebną
informację. Sposób umożliwiający przekazywanie dużych bloków danych.
; procedura sumujÄ…ca 1-bajtowe elementy tablicy
; paramatry: B - liczba elementów do zsumowania;
; DE - poczÄ…tek tablicy;
; HL - adres 2-bajtowego wyniku operacji.
; zmiany: DE:=DE+B, B:=0.
sumy: PUSH AF ; przechowanie AF na stosie
XOR A
LD (HL),A; zerowanie bajtów wyniku
INC HL
LD (HL),A
DEC HL
sumy1: LD A,(DE); A:=element tablicy
ADD A,(HL); dodawanie 2-bajtowe
LD (HL),A
INC HL
LD A,(HL)
ADC A,0
LD (HL),A
DEC HL
INC DE ; następny element tablicy
DJNZ sumy1 ; dekrement licznika B
POP AF ; odtworzenie AF ze stosu
RET
; przykład wywołania:
LD DE,tabliczb
LD HL,sumael
LD B,iloscel
CALL sumy
2
3. Przekazywanie parametrów/wyników przez wspólny, stały obszar w RAM.
Sposób umożliwiający przekazywanie dużych ilości danych, wpływa negatywnie na
współużywalność procedury.
Przykładowe zadeklarowanie obszarów wspólnych:
ORG 9000h albo: l1: EQU 9000h
l1: DEFS 4 l2: EQU 9004h
l2: DEFS 4 l3: EQU 9008h
lw: DEFS 4
; procedura realizujÄ…ca dodawanie liczb 4-bajtowych
; parametry: l1,l2 - 4-bajtowe obszary ze składnikami;
; wyniki: lw - 4-bajtowa suma
dod4b:EX AF,AF'; wybór alternatywnego AF
PUSH BC ; składowanie BC na stosie
PUSH IX ; składowanie IX na stosie
LD B,4 ; licznik bajtów
LD IX,l1 ; IX->obszar wspólny
XOR A ; CY:=0
dodb: LD A,(IX) ; A:=bajt z l1
ADC A,(IX+l2-l1) ; dodanie bajtu z l2
LD (IX+lw-l1),A; bajt sumy do lw
INC IX ; następne bajty
DJNZ dodb
POP IX ; odtworzenie rejestrów
POP BC
EX AF,AF'
RET
; przykład wywołania:
LD BC,4 ; inicjacja obszarów wspólnych
LD HL,liczba1
LD DE,l1
LDIR
LD BC,4
LD HL,liczba2
LD DE,l2
LDIR
CALL dod4b
LD HL,(lw) ; skopiowanie wyniku z obszaru
LD (suma),HL ; wspólnego do zmiennej roboczej
LD HL,(lw+2)
LD (suma+2),HL
3 ^L.J.Grodzki
^
4. Przekazywanie parametrów przez listę w treści programu.
Metoda stosowana do przekazywania parametrów, których wartość jest już znana na etapie
asemblacji (np. maks. liczba iteracji, liczba wykonania pętli opózniającej).
; procedura realizująca opóznienie
; parametry: k - krotność powtórzenia pętli, podana za kodem
; rozkazu wywołania
; zmiany: rej.F, B:=0
delayk:EX (SP),HL ; HL:=adres powrotu [19]
LD B,(HL); B:=krotność k [7]
INC HL ; inkrement adresu powrotu [6]
EX (SP),HL ; nowy adres powrotu na stos [19]
delay: EX (SP),HL ; rozkazy dajÄ…ce [19]
EX (SP),HL ; opóznienie [19]
DJNZ delay ; dekrement licznika powtórzeń [13/8]
RET ; [10]
; przykład wywołania:
CALL delayk ; [17]
DEFB k
stan po wejściu do
0CDh
procedury delayk
üÅ‚
(PC = delayk)
kod rozkazu CALL
delaykL
delaykH þÅ‚
adr.pow.=M(SP+1)M(SP)
k
jednobajtowa stała k
czas trwania opóznienia [w taktach CLK] (łącznie z wywołaniem):
N=51k+73
4
5. Przekazywanie parametrów/wyników przez stos.
Dobra metoda, zapewniająca dynamiczny przydział pamięci dla zmiennych, ale wymaga nieco
uwagi przy programowaniu, ponieważ ingeruje w strukturę stosu.
; procedura sumujÄ…ca k liczb 2-bajtowych
; parametry: liczby i licznik k - na stosie
; wynik: suma - na stosie, zamiast pierwszej z sumowanych liczb
sumujkliczb:PUSH HL
PUSH BC ; składowanie rejestrów na stosie
PUSH DE
PUSH AF
LD HL,10
ADD HL,SP ; IX->k na stosie
LD B,(HL); B - licznik liczb
INC HL
EX DE,HL
LD HL,0 ; wyzerowanie sumy S
sumujliczbe:INC DE ; DE->liczba na stosie
LD A,(DE); A:=młodszy bajt
ADD A,L
LD L,A
INC DE
LD A,(DE); A:=starszy bajt
ADC A,H
LD H,A
DJNZ sumujliczbe ; dekrement licznika powtórzeń
LD (DE),A; zapisanie sumy S na stosie
DEC DE ; w miejscu pierwszej z liczb
LD A,L
LD (DE),A; zapis młodszego bajtu
POP AF ; odtworzenie rejestrów
POP DE
POP BC
POP HL
RET
5 ^L.J.Grodzki
^
; przykładowe wywołanie
LD HL,(...); zapis k liczb
PUSH HL ; na stos
LD HL,k
PUSH HL ; k na stos
CALL sumujkliczb
INC SP ; k
INC SP ; razy
POP HL ; HL:=suma
stan stosu na stan stosu stan stosu na
początku przed końcu
procedury: sumowaniem: (przed RET):
H H H
L1 L1 S

DE
L L L
" " " " " " " " "
H H H
Lk Lk Lk
L L L
H H H

DE
k k k
L L L
H H H
adr.pow. adr.pow. adr.pow.

SP SP
L L L
HL
BC
DE
AF

SP
6
WSPÓAUŻYWALNOŚĆ PROCEDUR
Współużywalność polega na tym, że przerwanie wykonywania procedury
i powtórne jej wywołanie z innego miejsca programu (np. z wnętrza
procedury obsługi przerwania) nie zaburza pracy żadnego z programów
wywołujących.
Podstawowe warunki współużywalności to:
- niestosowanie samomodyfikacji kodu programu/procedury;
- stosowanie dynamicznego przydziału RAM na zmienne robocze
(np. na stosie), zamiast stałych obszarów roboczych, stałych
obszarów na parametry i wyniki.
Przykład dynamicznego przydziału RAM na stosie dla zmiennych
roboczych procedury:
procX:PUSH IX ; składowanie na stosie rejestrów
; w tym także IX
LD IX,-wor ; wor=wielkość obszaru roboczego w bajtach
ADD IX,SP
LD SP,IX ; zarezerwowanie obszaru roboczego na stosie
; treść procedury,
; dostęp do elementów obszaru roboczego
; np. adresowaniem indeksowym (IX+dd)
LD IX,wor ; zwolnienie obszaru roboczego
ADD IX,SP ; ze stosu pod koniec procedury
LD SP,IX
POP IX ; odtworzenie IX i innych rejestrów
RET
WSPÓABIEŻNOŚĆ PROCESÓW
Współbieżność procesów/programów polega na tym, że mikroprocesor
realizuje jednocześnie 2 lub więcej programów - oczywiście z tzw.
podziałem czasu (przełączanie dostępu do procesora poszczególnych
programów regulowane timerem - procesy równorzędne, albo przerwaniami
od asynchronicznych zdarzeń zewnętrznych - program tła i procedury
obsługi przerwań). Aby te zadania były realizowane poprawnie muszą
być spełnione warunki:
- rozdzielenie obszarów danych i kodu poszczególnych programów;
- stosowanie procedur współużywalnych.
7 ^L.J.Grodzki
^
ZASADY PROGRAMOWANIA
Cechy dobrego programu
1. Poprawność i prawidłowość pracy programu pisanie i kodowanie pogramu zajmuje tylko
ok. 20-30% całego czasu, reszta to proces uruchamiania i dokumentowania.
2. Elastyczność w modyfikacji i użytkowaniu - nie można zakładać ostateczności jakiejś wersji
programu - zwykle następują:
Ò! zmiany zaÅ‚ożeÅ„ wstÄ™pnych ze strony zleceniodawcy;
Ò! modyfikacje sprzÄ™tu, na który jest przeznaczony nasz program;
Ò! ujawnienie siÄ™ ukrytych dotychczas bÅ‚Ä™dów programu i sprzÄ™tu;
Ò! inne przyczyny (np. chęć udoskonalenia już dziaÅ‚ajÄ…cego programu);
3. Właściwa organizacja - składają się na nią następujące czynniki:
Ò! stosowanie zasad programowania strukturalnego;
Ò! nieunikanie procedur;
Ò! wyodrÄ™bnienie modułów peÅ‚niÄ…cych okreÅ›lone funkcje;
Ò! grupowanie deklaracji, np. w nagłówku programu (moduÅ‚u) wraz z odpowiednimi
komentarzami;
Ò! bardzo ostrożne operowanie wspólnymi obszarami roboczymi w pamiÄ™ci danych;
Ò! unikanie programów samomodyfikujÄ…cych siÄ™;
Ò! ograniczenie siÄ™ jedynie do zestawu oficjalnych rozkazów procesora;
Ò! wÅ‚aÅ›ciwy wybór nazw zmiennych, procedur i etykiet (nazwy powinny siÄ™ kojarzyć z
tym co reprezentujÄ…);
Ò! nadmiarowość kodu polegajÄ…ca np. na sprawdzaniu:
" na wejściu do procedury czy parametry odpowiadają wymaganiom;
" czy liczby reprezentujące zmierzone wielkości fizyczne są prawdopodobne/realne;
" indeksów tablic przed odwołaniem się do nich;
Ò! niestosowanie przenikania siÄ™ modułów.
4. Dokumentowanie programu:
Ò! odpowiednie nazwy obiektów sÄ… już częściÄ… komentarza-dokumentacji;
Ò! komentarze w tekÅ›cie programu: opisywanie realizowanych algorytmów, nagłówki
modułów i procedur, przykładowo każdy taki nagłówek winien zawierać informacje:
" nazwa i opis funkcji modułu;
" opis parametrów i sposobu ich przekazywania;
" opis wyników i sposobu ich otrzymywania;
" wpływ wykonania modułu na stan rejestrów `P;
" ewentualne zastrzeżenia, ograniczenia w używalności;
" przykład prawidłowego wywołania;
" lista innych, używanych wewnątrz danego, modułów;
" autor i data pierwszej wersji, ostatniej poprawki;
Ò! dokumentacja "papierowa";
5. Optymalność pracy
Zabiegi optymalizacyjne stosować tylko wtedy gdy jest to konieczne i dopiero po uzyskaniu
poprawnie działającego programu w wersji podstawowej.
Z reguły nie można pogodzić dużej szybkości pracy z małą zajętością
pamięci.
8


Wyszukiwarka