Lista rozkazów
Procesor 8086 dysponuje bardzo obszernym zbiorem rozkazów. Można je zgrupować w 108 podstawowych typów, a większość z nich wykorzystuje różne tryby adresacji i ma rozmaite inne opcje. Gdy chodzi o oprogramowanie, procesor 8086 jest nadrzędnie kompatybilny z programami napisanymi dla procesorów typu 8080 i 8085 na poziomie asemblera, lecz nie na poziomie kodu wynikowego. Właściwość ta okazuje się przydatna przy unowocześnianiu systemów opartych na procesorach 8080 i 8085 drogą wymiany jednostki centralnej na typ 8086.
Arytmetyczne
Operacje arytmetyczne są wykonywane bezpośrednio na liczbach 8- i 16-bitowych, zarówno znakowych jak nie. Obejmują one dodawanie, odejmowanie, mnożenie i dzielenie. Przy dodawaniu i odejmowaniu dziesiętnym można stosować liczby dwucyfrowe zapisane w kodzie BCD. Gdy operuje się liczbami jednocyfrowymi BCD, dostępne są wszystkie działania arytmetyczne. Dodawanie i odejmowanie może być wykonywane także w rejestrach BX, CX i DX, gdy zachodzi potrzeba.
Logiczne
Operacje logiczne obejmują funkcje AND, OR, EXCLUSIVE OR i NOT. Wykonywane są także wszystkie typowe operacje przesunięć arytmetycznych i cyklicznych, zerowania, inkrementacji, dekrementacji, negacji, uzupełnienia i porównania. Niektóre z nich mogą być zastosowane bezpośrednio do danych w pamięci.
Transmisji danych
Procesor może korzystać z rozmaitych rozkazów przesyłania danych w postaci bitów, bajtów, słów i cyfr w kodzie BCD. Istnieje możliwość transmisji bloków danych, przy czym rejestr CX jest stosowany do zlicznia przesyłanych bajtów. Operacja tego typu jest przydatna w działaniach na łańcuchach znaków.
Dane mogą być wysyłane na stos lub stamtąd pobierane. Stos ma własną przestrzeń adresową, odrębną od zwykłej pamięci danych. W razie potrzeby, w pamięci można utworzyć większą liczbę niezależnych stosów, przy czym jeśli dany stos nie jest używany, jego wskaźnik należy zachować w pamięci. Stosy są budowane w dół pamięci.
Skoki
Procesor 8086 dysponuje 26 rozkazami skoków warunkowych, spośród których 12 stanowi powtórzenia tych samych działań pod innymi nazwami, zaś 14 dotyczy rzeczywiście różnych typów skoków. Istnieją także rozkazy bezwarunkowego skoku i bezwarunkowego przejścia do podprogramu. Niektóre z nich pozwalają na skok do, lub wywołania procedury z innego segmentu pamięci programu.
Lista rozkazów mikroprocesora 8086:
AAA |
- Korekcja ASCII dla dodawania |
AAD |
- Korekcja ASCII dla dzielenia |
AAM |
- Korekcja ASCII dla mnożenia |
AAS |
- Korekcja ASCII dla odejmowania |
ADC |
- Dodaj z przeniesieniem |
ADD |
- Dodaj |
AND |
- Logiczne AND |
CALL |
- Wywołaj podprogram |
CBW |
- Przekształć bajt w słowo |
CLC |
- Zeruj znacznik przeniesienia |
CLD |
- Zeruj znacznik kierunkowy |
CLI |
- Zeruj znacznik włączenia przerwania |
CMC |
- Uzupełnij znacznik przeniesienia |
CMP |
- Porównaj |
CMPS |
- Porównaj bajt łańcycha/słowo |
CWD |
- Przekształć słowo w słowo podwójne |
DAA |
- Poprawka dziesiętna dla dodawania |
DAS |
- Poprawka dziesiętna dla odejmowania |
DEC |
- Dekrementuj |
DIV |
- Podziel liczby naturalne |
HLT |
- Wstrzymaj pracę, aż do zgłoszenia przerwania |
IDIV |
- Podziel liczby całkowite |
IMUL |
- Pomnóż liczby całkowite |
IN |
- Pobierz z portu |
INC |
- Inkrementuj |
INS |
- Pobierz bajt łańcucha/słowo z portu DX |
INT |
- Przerwanie |
INTO |
- Przerwanie 4, gdy znacznik nadmiaru ustawiony |
IRET |
- Porównaj z obsługi przerwania |
JB/JNAE |
- Skocz przy niższym/nie wyższym lub równym |
JBE/JNA |
- Skocz przy niższym lub równym/nie wyższym |
JCXZ |
- Skocz przy CX równym zero |
JE/JZ |
- Skocz przy równym/przy zero |
JL/JNGE |
- Skocz przy nie mniejszym/ nie większym lub równym |
JLE/JNG |
- Skocz przy mniejszym lub równym/ nie większym |
JMP |
- Skok bezwarunkowy |
JNB/JAE |
- Skocz przy nie niższym/wyższym lub równym |
JNBE/JA |
- Skocz przy nie niższym lub równym/wyższym |
JNE/JNZ |
- Skocz przy nie równym/nie zerowym |
JNL/JGE |
- Skocz przy nie mniejszym/większym lub równym |
JNLE/JG |
- Skocz przy nie mniejszym lub równym/większym |
JNO |
- Skocz, jeśli bit nadmiaru zerowy |
JNP/JPO |
- Skocz, jeśli bit parzystości zerowy/nieparzystość |
JNS |
- Skocz, jeśli bit znaku zerowy |
JO |
- Skocz, jeśli bit nadmiaru ustawiony |
JP/JPE |
- Skocz, jeśli bit parzystości ustawiony/parzystość |
JS |
- Skocz, jeśli bit znaku ustawiony |
LAHF |
- Ładuj AH do rejestru znaczników |
LDS |
- Ładuj wskaźnik do DS |
LEA |
- Ładuj adres efektywny |
LES |
- Ładuj wskaźnik do ES |
LODS |
- Ładuj bit łańcucha/słowo do AL/AX/EAX |
LOOP |
- Wykonaj pętlę CX razy |
LOOPZ/LOOPE |
- Powtarzaj pętlę, gdy zero/gdy równe |
LOOPNZ/LOOPNE |
- Powtarzaj pętlę, gdy nie zero/ gdy nie równe |
MOV |
- Przenieś dane |
MOVS |
- Przenieś bajt łańcucha/słowo |
MUL |
- Podziel liczby naturalne |
NEG |
- Zaneguj |
NOP |
- Nie rób nic |
NOT |
- Uzupełnienie logiczne |
OR |
- Logiczne OR |
OUT |
- Wyślij do portu |
OUTS |
- Wyślij bajt łańcucha/słowo do portu |
POP |
- Pobierz dane ze stosu |
POPF |
- Pobierz znaczniki |
PUSH |
- Wyślij dane na stos |
PUSHF |
- Wyślij znaczniki |
RCL |
- Przesuń cyklicznie w lewo przez przeniesienie |
RCR |
- Przesuń cyklicznie w prawo przez przeniesienie |
REPE CMPS |
- Powtarzaj porównanie łańcuchów znaków (znajdź brak zgodności) |
REPNE CMPS |
- Powtarzaj porównanie łańcuchów znaków (znajdź zgodność) |
REP INS |
- Powtórz pobieranie łańcucha znaków |
REP LODS |
- Powtórz ładowanie łańcucha znaków |
REP MOVS |
- Powtórz przenoszenie łańcucha znaków |
REP OUTS |
- Powtórz wysyłanie łańcucha znaków |
REPE SCAS |
- Powtórz skanowanie łańcucha znaków |
REPNE SCAS |
- Powtórz skanowanie łańcucha znaków |
REP STOS |
- Powtórz zapisywanie łańcucha znaków |
RET |
- Powróć z podprogramu |
ROL |
- Przesuń cyklicznie w lewo |
ROR |
- Przesuń cyklicznie w prawo |
SAHF |
- Zapisz znaczniki w rejestrze AH |
SAL |
- Przesunięcie arytmetyczne w lewo |
SAR |
- Przesunięcie arytmetyczne w prawo |
SBB |
- Odejmowanie z pożyczką |
SCAS |
- Skanuj bit łańcucha/słowo |
SHL |
- Przesuń w lewo |
SHR |
- Przesuń w prawo |
STC |
- Ustaw znacznik przeniesienia |
STD |
- Ustaw znacznik kierunkowy |
STI |
- Ustaw znacznik włączenia przerwania |
STOS |
- Zapisz bit łańcucha/słowo z AL/AX |
SUB |
- Odejmij |
TEST |
- Testuj dane |
WAIT |
- Wstrzymaj pracę, aż linia TEST będzie zanegowana |
XCHG |
- Wymień dane |
XLAT |
- Przesuwaj łańcuch znaków |
XOR |
- Suma logiczna modulo 2 |
Stosowane są następujące tryby adresacji:
rejestrowy bezpośredni (z określeniem źródła i przeznaczenia)
względny odniesiony do licznika rozkazów (przy rozkazach rozgałęzień)
bezwzględny (adres 16-bitowy)
Ze strony http://members.fortunecity.com/cybzolw/www/8086-lr.htm