170
5. Rozkazy mikroprocesorów 8086/8088
Mikroprocesor 80286
W (rybie adresacji rzeczywistej mikroprocesor 80286 akceptuje wszystkie rozkazy procesora 80186. Zbiór rozkazów 80286 obejmuje również dalsze, nowe rozkazy związane z pracą w trybie adresacji wirtualnej. Większość z nich nie jest realizowalna w trybie adresacji rzeczywistej. Rozkazy inicjujące pracę w trybie adresacji wirtualnej, muszą być wykonane w trybie adresacji rzeczywistej (np. po wyzerowaniu mikroprocesora). Nowe rozkazy
ARPL - ustawienie z rejestru (pamięci) żądanego poziomu przywileju,
CTS - wyzerowanie znacznika przełączania zadań,
LAR - ładowanie z rejestru (pamięci) prawa dostępu (zob. rys. 3.4)
LGDT - Å‚adowanie rejestru GDTR (zob. rys. 3.2),
LIDT - Å‚adowanie rejestru IDTR (zob. rys. 3.2),
LLDT - Å‚adowanie rejestru LDTR (zob. rys. 3.2),
LMSW - ładowanie z rejestru (pamięci) rejestru stanu MSW (zob. rys. 3.3)
LSL - ładowanie długości (ang. limit) segmentu (zob. rys. 3.4),
LTR - ładowanie rejestru zadania TR z pamięci (zob. rys. 3.2),
SGDT - zapamiętanie w pamięci zawartości rejestru GDTR,
SIDT - zapamiętanie w pamięci zawartości rejestru IDTR,
SLDT - zapamiętanie w pamięci zawartości rejestru LDTR,
SMSW - zapamiętanie w pamięci zawartości rejestru stanu MSW,
STR - zapamiętanie w pamięci zawartości rejestru zadania TR,
VERR - sprawdzenie prawa odczytu,
VERW - sprawdzenie prawa zapisu.
Spośród wymienionych powyżej rozkazów jedynie ARPL, LAR, LSL, VERR i VERW zmieniają jeden ze znaczników, a mianowicie znacznik zera ZF. W obu trybach adresowania są realizowalne rozkazy LGDT, SGDT, LIDT, SIDT, LMSW oraz SMSW. Pozostałe są dostępne jedynie w trybie adresacji wirtualnej. W związku z mechanizmami zabezpieczającymi tryb adresacji wirtualnej, (rozdz. 3.2), niektóre rozkazy zgodne z rozkazami procesorów 8086/8088 wykonują w procesorze 80286 pracującym w tym trybie znacznie więcej czynności. Przykładowo wykonanie rozkazów JMP, GALL, RET, IRET jest związane z koniecznością kontroli poziomów przywilejów programu wywołującego i wywoływanego.
Ipowered by
Makroinstrukcje umożliwiają wykonywanie pewnych działań na tekście programu źródłowego w czasie jego tłumaczenia za pomocą asemblera. W szczególności umożliwiają zdefiniowanie nowej instrukcji, która w programie źródłowym będzie generowała ciąg rozkazów maszynowych, dyrektyw, komentarzy itp. (ogólnie wierszy programu). Definicje makroinstrukcji mogą znajdować się na początku modułu programu, mogą też być w czasie asemblacji dołączane za pomocą dyrektywy 1NCLUDE (zob. p. 4.3.3). Można wymienić następujące (dyskusyjne) zalety i wady stosowania makroinstrukcji w programie
Zalety
- rozszerzenie możliwości języka,
- zaoszczędzenie czasu przeznaczonego na pisanie programu,
- większa czytelność programu źródłowego,
- mniejsza liczba błędów (powtarzający się ciąg wierszy programu jest kodowany jednokrotnie),
- możliwość modyfikowania postaci źródłowej i wyboru różnych wariantów (w przeciwieństwie do techniki stosowania podprogramów);
Wady
- wydłużenie programu źródłowego (w przeciwieństwie do techniki stosowania podprogramów),
- oddalenie się" od poziomu sprzętu (podobnie jak przy użyciu języków wysokiego poziomu),
‘ ograniczenie swobody w znajdowaniu interesujących rozwiązań programowych ze względu na logikę makroinstrukcji.
Język MASM dopuszcza następujące rodzaje makroinstrukcji nie wymagające definiowania REPT/ĘNDM, 1RP/ENDM, IRPC/ENDM wymagające zdefiniowania MACRO/ENDM
Z makroinstrukcjami sÄ… zwiÄ…zane ponadto