Skrócona lista rozkazów mikroprocesora 8086 Rozkazy mikroprocesora 8086 można podzielić na siedem funkcjonalnych grup: 1. Rozkazy przesłania danych w pami ci. 2. Arytmetyczne. 3. Logiczne. 4. Operacje blokowe. 5. Skoki. 6. Operacje kontroli procesora. 7. Rozkazy wejścia/wyjścia. 1. Rozkazy przesyłania danych Rozkazy przesyłania danych pozwalaj działać na danych bajtowych i 16-bitowych (słowa). Specjalnym ich przypadkiem s rozkazy przekazywania danych 32-bitowych, które służ do inicjalizacji rejestru (np. adresowego) i rejestru segmentu pełnym adresem 20- bitowym. Rozkazy przesyłania można podzielić na: uniwersalne, przesyłania adresów, przesyłania rejestru stanu. Do grupy rozkazów uniwersalnych zalicza si rozkazy: MOV - przeznaczony do przesyłania słów lub bajtów w operacjach typu rejestr-pami ć z (do) dowolnych rejestrów. Rozkaz ten może też przesyłać do pami ci dane określone w trybie prostym bez pośrednictwa rejestru. Składnia: MOV reg, reg - pomi dzy rejestrami MOV mem,reg - z rejestru do pami ci MOV reg,mem - z pami ci do rejestru MOV reg,stała - stałej do rejstru MOV mem,stała - stałej do pami ci MOV reg,seg - z rejestru segmentowego do rejestru 16-bitowego MOV mem,seg - z rejestru segmentowego do pami ci MOV seg,mem - z pami ci do rejestru segmentowego PUSH - przesłanie słowa na szczyt stosu. Składnia: PUSH reg/mem - prześlij 16-bitow wartość z rejestru lub pami ci na stos PUSH stała - prześlij stał na stos POP - pobranie słowa ze szczytu stosu, a nast pnie modyfikacja wskaznika stosu. Składnia: POP reg,mem - pobierz dan ze stosu do rejestru lub do pami ci XCHG - służy do wymiany zawartości rejestrów i pami ci. Argumentem rozkazu nie mog być rejestry segmentowe. Składnia: XCHG reg/mem,mem/reg LEA - rozkaz przesyłania do rejestru 16-bitowego adresu efektywnego określonego w trybie odwołania do pami ci. Rejestrem wynikowym operacji może być rejestr uniwersalny, wskaznik lub rejestr indeksowy. Rozkaz jest przeznaczony do pobierania adresu obiektu z pami ci w celu rutynowych działań na adresach. Składnia: LEA reg,pami ć - zmienna pami ć jest komórk pami ci, której adres efektywny b dzie wyliczony i przesłany do rejestru reg. LDS - rozkaz pobrania adresu z jednoczesnym załadowaniem rejestru DS i podanego rejestru. Składnia: LDS reg,pami ć - pami ć zawiera adres ładowany do rejestru segmentowego i do rejestru podanego jako argument. LES - rozkaz pobrania adresu z jednoczesnym załadowaniem rejestru ES i podanego rejestru. Składnia: LES reg,pami ć - pami ć zawiera adres ładowany do rejestru segmentowego i do rejestru podanego jako argument. LAHF - rozkaz pobrania do rejestru AH młodszego bajtu rejestru znaczników Składnia: LAHF SAHF - rozkaz przesłania do rejestru znaczników rejestru AH. Składnia: SAHF Ponadto ze stosem współpracuj instrukcje POPF i PUSHF: POPF - pobranie do rejestru znaczników słowa ze stosu. Składnia: POPF PUSHF - odłożenie rejestru znaczników na stos. Składnia: PUSHF 2. Rozkazy arytmetyczne Rozkazy arytmetyczne mikroprocesora 8086 mog wykonywać cztery podstawowe działania arytmetyczne: dodawanie, odejmowanie, mnożenie i dzielenie, operuj c na danych 8- i 16-bitowych. Każde z działań może operować na liczbach przedstawionych na trzy sposoby: niekodowanych - zwykła reprezentacja dwójkowa liczb (np. 10000000b), na liczbach kodowanych dziesi tnie (np. 128), liczbach zapisywanych w postaci HEX (np. 80h). ADD - dodawanie arytmetyczne dwóch liczb. Składnia: ADD reg,reg - dodawanie zawartości dwóch rejestrów ADD reg,mem - dodawanie do zawartości rejestru danej z pami ci ADD mem,reg - dodawanie do danej w pami ci zawartości rejestru ADD reg,stała - dodawanie danej natychmiastowej do rejestru ADD mem,stała - dodawanie danej natychmiastowej do danej w pami ci SUB - odejmowanie arytmetyczne dwóch liczb. Składnia: SUB reg,reg - dodawanie zawartości dwóch rejestrów SUB reg,mem - dodawanie do zawartości rejestru danej z pami ci SUB mem,reg - dodawanie do danej w pami ci zawartości rejestru SUB reg,stała - dodawanie danej natychmiastowej do rejestru SUB mem,stała - dodawanie danej natychmiastowej do danej w pami ci ADC - dodawanie dwóch liczb i znacznika przeniesienia. Instrukcja najcz ściej używana przy dodawaniu liczb wielobajtowych. Pozwala ona bowiem na uwzgl dnianie przeniesień, powstałych na młodszych bajtach. Składnia: ADC reg,reg - dodawanie zawartości dwóch rejestrów ADC reg,mem - dodawanie do zawartości rejestru danej z pami ci ADC mem,reg - dodawanie do danej w pami ci zawartości rejestru ADC reg,stała - dodawanie danej natychmiastowej do rejestru ADC mem,stała - dodawanie danej natychmiastowej do danej w pami ci SBB - odejmowanie arytmetyczne dwóch liczb z pożyczk Składnia: SBB reg,reg - dodawanie zawartości dwóch rejestrów SBB reg,mem - dodawanie do zawartości rejestru danej z pami ci SBB mem,reg - dodawanie do danej w pami ci zawartości rejestru SBB reg,stała - dodawanie danej natychmiastowej do rejestru SBB mem,stała - dodawanie danej natychmiastowej do danej w pami ci INC - zwi kszenie bajtu lub słowa o 1 (inkrementacja). Składnia: INC reg - inkrementacja rejestru INC mem - inkrementacja komórki w pami ci DEC - zmniejszenie bajtu lub słowa o 1 (dekremantacja). Składnia: DEC reg - dekrementacja rejestru DEC mem - dekrementacja komórki w pami ci AAA - instrukcja AAA używana jest do korekty wyniku po dodaniu dwóch liczb w rozpakowanym kodzie BCD (generalnie 16-bitowych). Składnia: AAA - korekcja Przykład. mov bx,0207h mov ax,0405h add ax,bx teraz ax=060Ch aaa teraz ax=0702h AAS - instrukcja AAS używana jest do korekty wyniku po odj ciu dwóch liczb w rozpakowanym kodzie BCD (generalnie 16-bitowych). Składnia: AAS - korekcja Przykład. mov ax,0505h mov bx,0207h sub ax,bx teraz ax=02FEh aas teraz ax=0108h DAA, DAS - działaj tak jak instrukcje AAA i AAS, tylko na argumentach w upakowanym kodzie BCD (generalnie 8-bitowych). MUL - mnożenie liczb bez znaku. Operacja 8-bitowa pobiera pierwszy argument z AL., natomiast operacja 16-bitowa pobiera argument z AX. Wynik jest przekazywany w pierwszym przypadku do AX, natomiast w drugim przypadku do pary rejestrów AX i DX. Składnia: MUL reg - mnożenie przez rejestr MUL mem - mnożenie przez zawartość komórki pami ci IMUL - jak wyżej dla liczb ze znakiem. Składnia: IMUL reg - mnożenie przez rejestr IMUL mem - mnożenie przez zawartość komórki pami ci DIV - dzielenie liczb bez znaku. Operacja dzielenia przez dzielnik 8-bitowy pobiera pierwszy argument z AX, natomiast operacja dzielenia przez dzielnik 16-bitowy pobiera argument z pary rejestrów AX i DX (DX jest starszym słowem wyniku). Składnia: DIV reg - dzielenie przez dan z rejestru DIV mem - dzielenie przez dan z komórki pami ci IDIV - jak wyżej dla liczb ze znakiem. AAD - instrukcja konwersji liczby w rozpakowanym kodzie BCD, znajduj cej si w rejestrach AH i AL., na liczb binarn . Składnia: AAD - konwersja AAM - instrukcja konwersji liczby w binarnej z rejestru AX na rozpakowany kod BCD, do rejestrów AH i AL. Składnia: AAM - konwersja Przykład. Po wykonaniu instrukcji mov ax,52h dziesi tnie jest to 82 aam al=2, ah=8 CBW - przekształcenie bajtu w AL na słowo w AX z uwzgl dnieniem znaku liczby. Składnia: CBW - przekształcenie Przykład. mov al,80h dziesi tnie jest to -128 cbw ax=FF80h CWB - przekształcenie słowa w AX na podwójne słowo (zapisane w parze rejestrów AX i DX). Składnia: CWD - przekształcenie Przykład. mov ax,8000h dziesi tnie jest to -32768 cwd ax=8000h, dx=FFFFhŁdx jest starszym słowem wyniku 3. Rozkazy logiczne, przesuni cia i obroty Rozkazy logiczne obejmuj standardowy zbiór operacji: negacji, sumy, iloczynu i różnicy symetrycznej. Przesuni cia i obroty wyst puj w ośmiu wariantach. Mog być jedno- i wielokrokowe. Wyniki przekazuj w rejestrze lub pami ci. Wariant krokowy odwołuje si do rejestru CL, jako zródła licznika przesuni cia. Do jednoargumentowych rozkazów tej grupy należ : NOT - negacja każdego bitu liczby. Składnia: NOT reg - negacja danej w rejestrze NOT mem - negacja danej w pami ci SHL - przesuni cie logiczne w lewo. Składnia: SHL mem,1 - przesuni cie logiczne komórki pami ci o 1 w lewo SHL reg,1 - przesuni cie logiczne zawartości rejestru o 1 w lewo SHL mem,cl - przesuni cie logiczne komórki pami ci o zawartość CL w lewo SHL reg,cl - przesuni cie logiczne komórki rejestru o zawartość CL w lewo SHR - przesuni cie logiczne w prawo. Składnia i argumenty jak dla SHL. SAL - przesuni cie arytmetyczne w lewo. Operacja równoważna z mnożeniem przez 2. Składnia: SAL mem,1 - przesuni cie arytm. komórki pami ci o 1 w lewo SAL reg,1 - przesuni cie arytm. zawartości rejestru o 1 w lewo SAL mem,cl - przesuni cie arytm. komórki pami ci o zawartość CL w lewo SAL reg,cl - przesuni cie arytm. komórki rejestru o zawartość CL w lewo SAR - przesuni cie arytmetyczne w prawo. Operacja równoważna z dzieleniem przez 2. Składnia: SAR mem,1 - przesuni cie arytm. komórki pami ci o 1 w prawo SAR reg,1 - przesuni cie arytm. zawartości rejestru o 1 w prawo SAR mem,cl - przesuni cie arytm. komórki pami ci o zawartość CL w prawo SAR reg,cl - przesuni cie arytm. komórki rejestru o zawartość CL w prawo ROL - obrót w lewo. Składnia jak dla rozkazów SHL, SHR, SAL, SHR. ROR - obrót w prawo. Składnia jak dla rozkazów SHL, SHR, SAL, SHR. RCL - obrót w lewo z uwzgl dnieniem bity Carry. Składnia jak dla rozkazów SHL, SHR, SAL, SHR. RCR - obrót w prawo z uwzgl dnieniem bity Carry. Składnia jak dla rozkazów SHL, SHR, SAL, SHR. Rozkazami dwuargumentowymi s : AND - Mnożenie logiczne argumentów. Składnia: AND reg,reg - mnożenie logiczne zawartości dwóch rejestrów AND reg,mem - mnożenie logiczne zawartości rejestru i danej w pami ci AND mem,reg - mnożenie logiczne danej w pami ci i zawartości rejestru AND reg,stala - mnożenie logiczne zawartości rejestru i stałej AND mem,stała - mnożenie logiczne danej w pami ci i zawartości rejestru TEST - testowanie wybranych bitów argumentów. Instrukcja ta wykonuje logiczn operacj AND na swoich argumentach. Wynik nie jest nigdzie zapami tywany, ale na jego podstawie ustawiane s znaczniki. Składnia: TEST reg,reg - testowanie zawartości dwóch rejestrów TEST reg,mem - testowanie zawartości rejestru z dan w pami ci TEST mem,reg - testowanie danej w pami ci z zawartości rejsetru TEST reg,stała - testowanie zawartości rejestru z dan natychmiastow TEST mem,stała - testowanie danej w pami ci z dan natychmiastow OR - suma logiczna argumentów. Składnia: OR reg,reg - suma logiczna zawartości dwóch rejestrów OR reg,mem - suma logiczna zawartości rejestru i danej w pami ci OR mem,reg - suma logiczna danej w pami ci zawartości rejestru OR reg,stała - suma logiczna zawartości rejestru i danej natychmiastowej OR mem,stała - suma logiczna danej w pami ci z dan natychmiastow XOR - różnica symetryczna argumentów. Składnia jak dla instrukcji OR. 4. Rozkazy operacji blokowych Rozkazy tego typu: mog być wykorzystywane w wariancie jedno- i wielokrokowym, używaj rejestrów implicite przypisanych do adresowanie i zliczania kroków: rejestr SI jest zródłem adresu danych, DI - adresu wyniku, a CX licznikiem kroków, rozkaz wielokrokowy może być przerywany po zakończeniu kroku, kierunek operacji zależy od stanu bitu DF w rejestrze znaczników (0-zwi kszanie, 1- zmniejszanie). Do rozkazów tych należ (w nawiasach rozkazy bajtowe lub działaj ce na słowach): MOVS (MOVSB, MOVSW) - przepisanie danych (bajt lub słowo) - instrukcja przepisuje dane wskazywane przez DS:SI pod adres ES:DI, a nast pnie modyfikuj rejestry indeksowe. CMPS (CMPSB, CMPSW) - porównanie danych (bajt lub słowo) - instrukcja porównuje dane wskazywane przez DS:SI pod adres ES:DI, a nast pnie modyfikuj rejestry indeksowe. SCAS (SCASB, SCASW) - porównanie danych (bajtu lub słowa) wskazywanych przez par rejestrów ES:DI z dan która si znajduje w AL lub AX. LODS (LODSB, LODSW) - załadowanie danych (bajtu lub słowa) - instrukcja ładuje dane z pami ci wskazywane przez DS:SI do AL lub AX. STOS (STOSB< STOSW) - przesłanie danych (bajtu lub słowa) - instrukcja przesyła dane z AL lub AX do miejsca w pami ci wskazywanego przez ES:DI. Instrukcja ta działa odwrotnie do instrukcji LODS. Każda z instrukcji blokowych może być poprzedzona instrukcj REP, co spowoduje, że zostanie ona wykonana nie jeden raz, ale CX razy (rejestr CX b dzie zawierał liczb powtórzeń każdej z instrukcji blokowej). 5. Rozkazy skoków Rozkazy skoków można podzielić na: skoki zwykłe i warunkowe, wywołania podprogramów, powroty z procedur, rozkazy tworzenia iteracji, przerwania programowe. Mnemoniki Opis Skoki bezwarunkowe: CALL Skok do podprogramu (wywołanie procedury) JMP Skok bezwarunkowy RET Powrót z podprogramu (procedury) Skoki warunkowe: JE / JZ Skok, gdy równy / zero JNE / JNZ Skok, gdy nie równy / nie zero JO Skok, gdy nadmiar po operacji dla liczb ze znakiem (> 32767) JNO Skok, gdy nie ma nadmiaru po operacji dla liczb ze znakiem (< 32767) JC Skok, gdy nadmiar po operacji dla liczb bez znaku (> 65535) JNC Skok, gdy nie ma nadmiaru po operacji dla liczb bez znaku (< 65535) JP / JPE Skok, gdy parzystość (parity even) (flaga PF=1) JNP / JPO Skok, gdy nieparzystość (parity odd) (flaga PF=0) JS Skok, gdy znak ujemny (flaga SF = 1) JNS Skok, gdy znak dodatni (flaga SF = 0) Skoki warunkowe po porównaniach liczb bez znaku (unsigned): JB / JNAE Skok, gdy poniżej/nie powyżej lub nie równo JBE / JNA Skok, gdy poniżej lub równo/nie powyżej JAE / JNB Skok, gdy powyżej lub równo / nie poniżej JA / JNBE Skok, gdy powyżej / nie poniżej lub równo Skoki warunkowe po porównaniach liczb ze znakiem (signed): JL / JNGE Skok, gdy mniejszy/nie równy lub nie wi kszy JLE / JNG Skok, gdy mniejszy lub równy / nie wi kszy JGE / JNL Skok, gdy wi kszy lub równy / nie mniejszy JNLE/JG Skok, gdy nie mniejszy lub równy/wi kszy Skoki zwi zane z wartości rejestru CX JCXZ Skok, gdy rejestr CX = 0 6. Rozkazy kontroli iteracji LOOP - zmniejsza CX o 1 i wykonuje skok, gdy CX ą 0. Składnia: LOOP nazwa_etykiety - skok do etykiety, gdy CX ą 0 LOOPE działa jak LOOP, tylko skok gdy CXą 0 oraz bit zera jest ustawiony (ZF=1). LOOPNE - działa jak LOOP, tylko skok gdy CXą 0 oraz bit zera nie jest ustawiony (ZF=0). JCXZ - rozkaz skoku warunkowego, który jest wykonywany, gdy CX jest równy zero. UWAGA: Jak widać, rozkazy kontroli iteracji wykorzystuj rejestr CX jako licznik iteracji. Należy zatem pami tać, aby w p tlach (bo do tego głównie b d wykorzystywane tego rodzaju skoki) uważać z modyfikacj rejestru CX. Poza tym zasi g tych skoków to -128+127 bajtów. Etykieta, do której wykonywany jest skok powinna si znajdować na ogół powyżej instrukcji kontroli iteracji. Przykład. MOV CX,10 Tu: ............... ............... ci g instrukcji pętli ............... LOOP Tu Powyższa p tla zostanie wykonana 10 razy. 7. Rozkazy przerwań programowych Procesor 8086 używa tablicy wektorów przerwań przechowuj cej 256 adresów procedur obsługi przerwania. Lista rozkazów zawiera dwa przerwania programowe: INT - przerwanie programowe. Składnia: INT numer_przerwania - wywołanie przerwania o podanym numerze INTO - wygenerowanie przerwania nr 4 w przypadku, gdy znacznik nadmiaru jest ustawiony. Składnia: INTO RET - powrót z podprogramu. Skladnia: RET IRET - powrót z podprogramu obsługi przerwania. Składnia: IRET