184
7. Wybrane techniki programowania
Z tworzeniem podprogramów zasadniczo są związane dwa typy rozkazów: CALL wywołujący podprogram i RET pozwalający powrócić do miejsca wywołania (rys. 7.1). Rozkazy te zmieniają zawartość wskaźnika rozkazów 1P oraz ewentualnie rejestru segmentowego CS, przekazując sterowanie w żądane miejsce programu. Wykorzystują także stos, tj. wydzielony obszar pamięci operacyjnej, do którego dostęp odbywa się zgodnie z zasadą LIFO (ang. łasi in,first out ), czyli "ostatni wchodzi, pierwszy wychodzi". Stos jest używany do zapamiętania offsetu (i ewentualnie adresu początku segmentu) rozkazu, znajdującego się bezpośrednio po wywołaniu podprogramu rozkazem CALL. Do rozkazu tego należy powrócić po wykonaniu podprogramu. Dostęp do stosu najłatwiej wytłumaczyć przez porównanie ze stosem talerzy, na którego szczyt możemy dokładać talerze i z którego możemy je zdejmować jedynie w odwrotnej kolejności. Szczyt stosu jest wska/ywany przez rejestry: SP - offset szczytu oraz SS - adres początku segmentu stosu (rys. 7.2). Zmianę zawartości rejestru SP oraz IP, a także stosu w czasie wywoływania kolejnych podprogramów, przedstawiono na rys. 7.3. Segment stosu może być definiowany w identyczny sposób jak segment danych. Jedynie słowa mogą być zapisywane i odczytywane do (ze) stosu. Wskaźnik stosu SP zawiera zawsze offset ostatnio zapisanego słowa do stosu. Zapis lub odczyt każdorazowo zmniejsza lub zwiększa o dwa zawartość wskaźnika SP. Stos jest inicjowany z naj-
Segment stosu
PoczÄ…tek segmentu stosu
SS | |||
Offset danego słowa w stosie | |||
SP |
Po inicjacji stosu, przed pierwszym zapisem
Pamięć
0
1
2
3
OFEH
SP
OFPH
Rys. 7.2. Przykładowy segment stosu
Stos
Rys. 7.3. Stany stosu w trakcie przykładowego wywołania podprogramów
większym adresem segmentu stosu i jest zapełniany wraz z adresami malejącymi. Typowy sposób definiowania segmentu stosu.
STOS |
SEGMENT | |
DW 128 DUP (?) ; stos ma 128 słów | ||
SZCZYT STOSU LABEL WORD | ||
STOS |
ENDS |
♦ |
Tak zdefiniowanemu segmentowi stosu musi odpowiadać w segmencie programu (ini-cJująca) sekwencja rozkazów i dyrektyw.