21
Wykorzystanie procedur

Wykorzystanie procedur

  • Upload
    marlon

  • View
    66

  • Download
    0

Embed Size (px)

DESCRIPTION

Wykorzystanie procedur. Procedury 2 /21. Współużywalność procedur Współbieżność procesów Wymiana informacji z procedurami. - PowerPoint PPT Presentation

Citation preview

Page 1: Wykorzystanie procedur

Wykorzystanie procedur

Page 2: Wykorzystanie procedur

Współużywalność procedur

Współbieżność procesów

Wymiana informacji z procedurami

Procedury 2/21

Page 3: Wykorzystanie procedur

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.

Page 4: Wykorzystanie procedur

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

Page 5: Wykorzystanie procedur

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

Page 6: Wykorzystanie procedur

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

Page 7: Wykorzystanie procedur

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.

Page 8: Wykorzystanie procedur

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.

Page 9: Wykorzystanie procedur

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

Page 10: Wykorzystanie procedur

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

Page 11: Wykorzystanie procedur

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

Page 12: Wykorzystanie procedur

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

Page 13: Wykorzystanie procedur

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

Page 14: Wykorzystanie procedur

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

Page 15: Wykorzystanie procedur

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”

Page 16: Wykorzystanie procedur

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

Page 17: Wykorzystanie procedur

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

Page 18: Wykorzystanie procedur

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

Page 19: Wykorzystanie procedur

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ń

Page 20: Wykorzystanie procedur

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

Page 21: Wykorzystanie procedur

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