Wykorzystanie procedur
description
Transcript of Wykorzystanie procedur
Wykorzystanie procedur
Współużywalność procedur
Współbieżność procesów
Wymiana informacji z procedurami
Procedury 2/21
Procedury - współużywalność 3/21
współużywalność procedury - 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 oraz
stałych obszarów na parametry i wyniki.
Procedury - współużywalność 4/21
Ilustracja współużywalności w systemie jednozadaniowym
…ld A,Badd A,D
…ret
AR1:(proc. arytm.)
...ld B,14ld D,17call AR1ld (wyn2),A
...reti
INTSRV:(proc. obsługi
przerwania)
…ld B,4ld D,7call AR1ld (wyn1),A
…
programgłówny
! Procedura AR1 wykorzystuje/zmienia rejestry:A, F
! Procedura INTSRV wykorzystuje/zmienia rejestry:B, D, A, F
Procedury - współużywalność 5/21
Ilustracja współużywalności w systemie wielozadaniowym
…ld A,Badd A,D
…ret
AR1:(proc. arytm.)
program #2
...ld B,4ld D,7
program #1
...
...ld B,10
call AR1ld (wyn1),A
...
ld D,11call AR1ld (wyn2),A
Procedury - współużywalność 6/21
Przykład dynamicznego przydziału RAM na stosie dla zmiennychroboczych procedury:
procX: PUSH IX ; składowanie na stosie rejestrów; w tym także IX
LD IX,-wor ; wor=wielkość obszaru roboczego w bajtachADD IX,SPLD 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 roboczegoADD IX,SP ; ze stosu pod koniec proceduryLD SP,IXPOP IX ; odtworzenie IX i innych rejestrówRET
Procedury - współbieżność procesów 7/21
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.
Procedury 8/21
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); uniwersalności i prostoty wymiany danych; wpływu na współużywalność procedury wołającej i wywoływanej.
Procedury 9/21
1. Przekazywanie parametrów/wyników przez rejestry
Szybki sposób przekazywania niewielkiej ilości danych.; procedura generująca programowo zadane opóźnienie; parametry: B - czas opóźnieniadelay: 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óźnienia (łą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=32s t=400ns k=0 N=13138 T=5.25ms
Procedury 10/21
2. Przekazywanie parametrów/wyników przez rejestry pośrednio
Wykorzystuje się mechanizmy adresowania za pośrednictwem rejestrów procesora.
Metoda pozwala przekazywać procedurze / odbierać od niej wskazania do obszarów danych o dowolnej wielkości.
Zwykle stosowana do przekazywania wskaźników do struktur tablicowych, rekordowych.
; przykład wywołania:LD DE,tabliczb ;wskazanie na adr. pocz. tablicyLD HL,sumael ;wskazanie na słowo wynikuLD B,iloscelCALL sumy
Procedury 11/21
; procedura sumująca 1-bajtowe elementy tablicy; parametry: 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 wynikuINC HLLD (HL),ADEC HL
sumy1: LD A,(DE) ;A:=element tablicyADD A,(HL) ;dodawanie 2-bajtoweLD (HL),AINC HLLD A,(HL)ADC A,0LD (HL),ADEC HLINC DE ; następny element tablicyDJNZ sumy1 ; dekrement licznika BPOP AF ; odtworzenie AF ze stosuRET
Procedury 12/21
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.
Związany jest z koniecznością dodatkowego przesyłu informacji do stałego obszaru przed wywołaniem procedury i/lub z tego obszaru po wyjściu z procedury.
Wpływa negatywnie na współużywalność procedury.
; przykład wywołania:LD BC,4 ; inicjacja obszarów wspólnychLD HL,liczba1LD DE,l1LDIRLD BC,4LD HL,liczba2LD DE,l2LDIRCALL dod4bLD HL,(lw) ; skopiowanie wyniku z obszaruLD (suma),HL ; wspólnego do zmiennej roboczejLD HL,(lw+2)LD (suma+2),HL
Procedury 13/21
; procedura realizująca dodawanie liczb 4-bajtowych; parametry: l1,l2 - 4-bajtowe obszary ze składnikami;; wyniki: lw - 4-bajtowa sumadod4b:EX AF,AF’ ; wybór alternatywnego AF
PUSH BC ; składowanie BC na stosiePUSH IX ; składowanie IX na stosieLD B,4 ; licznik bajtówLD IX,l1 ; IX->obszar wspólnyXOR A ; CY:=0
dodb: LD A,(IX+0) ; A:=bajt z l1ADC A,(IX+l2-l1) ; dodanie bajtu z l2LD (IX+lw-l1),A ; bajt sumy do lwINC IX ; następne bajtyDJNZ dodbPOP IX ; odtworzenie rejestrówPOP BCEX AF,AF'RET
Procedury 14/21
Stały obszar w asemblerze może być definiowany na różne sposoby:
ORG 9000hl1: DFS 4l2: DFS 4lw: DFS 4
albo:
l1: EQU 9000hl2: EQU 9004hl3: EQU 9008h
Procedury 15/21
program
wpis
call
odczyt
proc.
np. arytm.
danedanedane
Stały obszar a współużywalność procedury
wariant „bezpieczny”
obsługa
przerw.
program
wpis
call
odczyt
proc.
np. arytm.
danedanedanedanedane
wariant „krytyczny”
Procedury 16/21
4. Przekazywanie parametrów przez listę w treści programu
Wykorzystuje się mechanizmy dostępu do stosu.
Metoda stosowana do przekazywania parametrów, których wartość jest już znana na etapie asemblacji (np. maks. liczba iteracji, liczba wykonania pętli opóźniającej).
Zwykle stosowana do przekazywania wskaźników do struktur tablicowych, rekordowych.
; przykład wywołania:CALL delayk ; [17]DFB k
0CDh
delaykL
delaykH
kadr.pow.=M(SP+1)M(SP)
stan po wejściu doprocedury delayk
(PC = delayk)
jednobajtowa stała k
kod rozkazu CALL
Procedury 17/21
; procedura realizująca opóźnienie; parametry: k - krotność powtórzenia pętli, podana za kodem; rozkazu wywołania; zmiany: rej.F, B:=0delayk:EX (SP),HL; [19] HL:=adres powrotu
LD B,(HL) ; [7] B:=krotność kINC HL ; [6] inkrement adresu powrotuEX (SP),HL; [19] nowy adres powrotu na stos
delay: EX (SP),HL; [19] rozkazy dające EX (SP),HL; [19] opóźnienie DJNZ delay ; [13/8] dekrement licznika powtórzeńRET ; [10]
czas trwania opóźnienia [w taktach CLK] (łącznie z wywołaniem):
N=51k+73
Procedury 18/21
5. Przekazywanie parametrów / wyników przez stos
Wykorzystuje się mechanizmy dostępu do stosu.
Dobra metoda, zapewniająca dynamiczny przydział pamięci dla zmiennych, ale wymaga nieco uwagi przy programowaniu, ponieważ ingeruje w strukturę stosu.
Zwykle stosowana przez kompilatory do przekazywania parametrów do procedur i tworzenia dla nich dynamicznych obszarów roboczych.
; przykład wywołania:LD HL,(...) ; zapis k liczbPUSH HL ; na stosLD HL,kPUSH HL ; k na stosCALL sumujkliczbINC SP ; kINC SP ; razyPOP HL ; HL:=suma
Procedury 19/21
; procedura sumująca k liczb 2-bajtowych; parametry: liczby i licznik k - na stosie; wynik: suma - na stosie, zamiast pierwszej z sumowanych liczbsumujkliczb: PUSH HL
PUSH BC ; składowanie rejestrów na stosiePUSH DEPUSH AFLD HL,10ADD HL,SP ; IX->k na stosieLD B,(HL) ; B - licznik liczbINC HLEX DE,HLLD HL,0 ; wyzerowanie sumy S
sumujliczbe: INC DE ; DE->liczba na stosieLD A,(DE) ; A:=młodszy bajtADD A,LLD L,AINC DELD A,(DE) ; A:=starszy bajtADC A,HLD H,ADJNZ sumujliczbe; dekrement licznika powtórzeń
Procedury 20/21
LD (DE),A ; zapisanie sumy S na stosieDEC DE ; w miejscu pierwszej z liczbLD A,LLD (DE),A ; zapis młodszego bajtuPOP AF ; odtworzenie rejestrówPOP DEPOP BCPOP HLRET
Procedury 21/21
DE
an stosu na początkuprocedury:
stan stosu przedsumowaniem:
stan stosu na końcu(przed RET):
H
L1L
H
LkL
H
kL
H
adr.pow.L
SP
H
L1L
H
LkL
H
kL
H
adr.pow.L
HL
BC
DE
AFSP
H
SL
H
LkL
H
kL
H
adr.pow.L
SP
DE