110 1 1. Programy, podprogramy, segmenty
adresów są takie same jak odpowiednio w rozkazach AJMP i LJMP. Również w większości asemblerów' można podać skrót CALL, a asembler dobierze odpowiedni typ rozkazu.
Tabela 11-3 Rozkazy powrotu z podprogramów
instrukcje: |
zapis binarny instrukcji |
wykonywane operacje |
RET |
00100010 |
PC1S 8 (SP), SP c-SP-1 PC7 0<-(SP), SP«-SP-1 |
RETI |
00110010 |
PC1S « <- (SP), SP <- SP -1 PC7 0<-(SP), SP<-SP-1 |
Rozkazy powrotu z podprogramu powodują przepisanie do licznika rozkazów PC adresu przechowywanego na stosie. Dodatkowo rozkaz RETI stosowany w podprogramach obsługi przerwania odblokowuje system przerwań.
W celu ułatwienia programiście operowania danymi, łączenia programów w określonej kolejności w większości narzędzi programowania jest możliw'y podział programu na segmenty. W segmentach następuje przypisanie wybranej grupy zmiennych do określonego typu pamięci - pamięć danych zewnętrzna/} wewnętrzna, pamięć programu. Również wybrane sekwencje rozkazów, najczęściej podprogramy, są przypisywane do segmentów.
Segmenty mogą być relokow'alne lub nierelokowralne. Segmenty nierelo-kowralne są to segmenty umieszczane w obszarze pamięci od adresu zadeklarowanego przez programistę. W trakcie łączenia programów przez linker tego typu segmenty nie mogą być przesuwane do innego obszaru pamięci. Segmenty nierelokowalne są stosowane dla zadeklarowania adresów obsługi przerwań, przy pojedynczych programach, lub gdy program ma być umieszczony od zadanego adresu, np. w niektórych modułach mikroprocesorowych. W powyższym przykładzie w segmencie nierelokowralnym zostały umieszczone rozkazy skoku do programu główmego i podprogramu obsługi przerwania.
Segmenty relokowalne są to segmenty, które po asemblacji otrzymują ad-resy chwilowe, natomiast adresy ostateczne uzyskują po linkowaniu. Mają one bardzo istotne znaczenie, gdyż umożliwiają skorzystanie z wcześniej przygotowanych procedur (programy biblioteczne) dla potrzeb innych programów'. Na przykład raz napisana procedura mnożenia lub dzielenia wielobajtowego może być dołączana do różnych programów w miejscu wskazanym przez prograiW' stę. W powyższym przykładzie, jeżeli podprogramy inicjalizacji pola LCD, odczytu klawiatury i wysyłania znaku na pole odczytowe będą dołączane do pro-gramu głównego przez linker, to będą one musiały być umieszczone w segmertj tach relokow'alnych.
Do łączenia programów relokowalnych służy linker, w którym zadaje się adres początkowy programu i podaje kolejność rozmieszczenia łączonych programów. Adresy, pod którymi są umieszczone programy, poza początkowym, linker przydziela automatycznie.
Podobnie ma się z rozmieszczeniem danych w pamięci RAM. Po zadeklarowaniu odpowiednich segmentów relokowalnych linker łączy poszczególne segmenty w jedną całość, dzięki czemu programista nie musi kontrolować, czy obszary danych nie nakładają się na siebie, lub nie zostaje niewykorzystana wolna przestrzeń pamięci.
Sposób deklarowania segmentów jest podany w rozdziale 17 opisującym narzędzia programowania.
1. Co to jest algorytm i do czego służy ?
2. Jakie są podstawowe elementy algorytmu ?
3. Ułożyć algorytm dla regulatora temperatury.
4. Dlaczego programy są podzielone na podprogramy ?
5. Czym charakteryzuje się podprogram obsługi przerwania ?
6. Jak mogą być rozmieszczone podprogramy wr pamięci programu procesora ?
7. Co to są segmenty ?
8. Czym charakteryzują się segmenty relokowalne ?
9. Czym charakteryzują się segmenty nierelokowalne ?