Instrukcje procesorów 8086-Pentium
Podstawowe skróty stosowane w spisie:
acc = Akumulator (AL, AX lub EAX, chyba, że dokładnie określono który)
reg = Dowolny rejestr ogólny
r8 = Dowolny 8-bitowy rejestr
r16 = Dowolny 16-bitowy rejestr ogólny
r32 = Dowolny 32-bitowy rejestr ogólny
imm = Dane natychmiastowe (stała umieszczona w instrukcji)
imm8 = 8-bitowe dane natychmiastowe
imm16 = 16-bitowe dane natychmiastowe
mem = Adres w pamięci
mem8 = Adres 8-bitowej danej
mem16 = Adres 16-bitowej danej
mem32 = Adres 32-bitowej danej
mem48 = Adres 48-bitowej danej
dest = 16/32-bitowe miejsce przeznaczenia
short = 8-bitowe miejsce przeznaczenia
Czasy wykonywania instrukcji:
n - liczba powtarzanych operacji
m - w skoku lub wywołaniu procedury:
286 - liczba bajtów w następnej instrukcji
386/486 - liczba komponentów: (każdy bajt kodu operacji) + 1 (jeżeli dane natychmiastowe) + 1 (jeżeli przesunięcie)
Kategorie parowalności w procesorach Pentium:
NP = nie parowalne
UV = parowalne zarówno w potoku U jak i V
PU = parowalne tylko w potoku U
PV = parowalne tylko w potoku V
8088/8086 Wyliczanie adresu efektywnego (EA)
| Opis | Liczba cykli zegara |
| Przesunięcie | 6 |
| Rejestr bazowy (Base) lub indeksowy (Index) (BX,BP,SI,DI) | 5 |
| Przesunięcie+(Baza lub Indeks) | 9 |
| Baza+Indeks (BP+DI,BX+SI) | 7 |
| Baza+Indeks(BP+SI, BX+DI) | 8 |
| Baza+Indeks+Przesunięcie(BP+DI, BX+SI) | 11 |
| Baza+Indks+Przesunięcie (BP+SI+disp, BX+DI+disp) | 12 |
- dodaj 4 cykle dla słów w nieparzystych adresach
- dodaj 2 cykle do nadpisania segmentu
- 80188/80186 taktowanie różni się od tego z 8088/8086/80286
Instrukcje procesorów 8086-80486
- AAA - Ascii Adjust for Addition
- AAD - Ascii Adjust for Division
- AAM - Ascii Adjust for Multiplication
- AAS - Ascii Adjust for Subtraction
- ADC - Add With Carry
- ADD - Arithmetic Addition
- AND - Logical And
- ARPL - Adjusted Requested Privilege Level of Selector (286+ PM)
- BOUND - Array Index Bound Check (80188+)
- BSF - Bit Scan Forward (386+)
- BSR - Bit Scan Reverse (386+)
- BSWAP - Byte Swap (486+)
- BT - Bit Test (386+)
- BTC - Bit Test with Compliment (386+)
- BTR - Bit Test with Reset (386+)
- BTS - Bit Test and Set (386+)
- CALL - Procedure Call
- CBW - Convert Byte to Word
- CDQ - Convert Double to Quad (386+)
- CLC - Clear Carry
- CLD - Clear Direction Flag
- CLI - Clear Interrupt Flag (disable)
- CLTS - Clear Task Switched Flag (286+ privileged)
- CMC - Complement Carry Flag
- CMP - Compare
- CMPS - Compare String (Byte, Word or Doubleword)
- CMPXCHG - Compare and Exchange
- CWD - Convert Word to Doubleword
- CWDE - Convert Word to Extended Doubleword (386+)
- DAA - Decimal Adjust for Addition
- DAS - Decimal Adjust for Subtraction
- DEC - Decrement
- DIV - Divide
- ENTER - Make Stack Frame (80188+)
- ESC - Escape
- HLT - Halt CPU
- IDIV - Signed Integer Division
- IMUL - Signed Multiply
- IN - Input Byte or Word From Port
- INC - Increment
- INS - Input String from Port (80188+)
- INT - Interrupt
- INTO - Interrupt on Overflow
- INVD - Invalidate Cache (486+)
- INVLPG - Invalidate Translation Look-Aside Buffer Entry (486+)
- IRET/IRETD - Interrupt Return
- Jxx - Jump Instructions Table
- JCXZ/JECXZ - Jump if Register (E)CX is Zero
- JMP - Unconditional Jump
- LAHF - Load Register AH From Flags
- LAR - Load Access Rights (286+ protected)
- LDS - Load Pointer Using DS
- LEA - Load Effective Address
- LEAVE - Restore Stack for Procedure Exit (80188+)
- LES - Load Pointer Using ES
- LFS - Load Pointer Using FS (386+)
- LGDT - Load Global Descriptor Table (286+ privileged)
- LIDT - Load Interrupt Descriptor Table (286+ privileged)
- LGS - Load Pointer Using GS (386+)
- LLDT - Load Local Descriptor Table (286+ privileged)
- LMSW - Load Machine Status Word (286+ privileged)
- LOCK - Lock Bus
- LODS - Load String (Byte, Word or Double)
- LOOP - Decrement CX and Loop if CX Not Zero
- LOOPE/LOOPZ - Loop While Equal / Loop While Zero
- LOOPNZ/LOOPNE - Loop While Not Zero / Loop While Not Equal
- LSL - Load Segment Limit (286+ protected)
- LSS - Load Pointer Using SS (386+)
- LTR - Load Task Register (286+ privileged)
- MOV - Move Byte or Word
- MOVS - Move String (Byte or Word)
- MOVSX - Move with Sign Extend (386+)
- MOVZX - Move with Zero Extend (386+)
- MUL - Unsigned Multiply
- NEG - Two's Complement Negation
- NOP - No Operation (90h)
- NOT - One's Compliment Negation (Logical NOT)
- OR - Inclusive Logical OR
- OUT - Output Data to Port
- OUTS - Output String to Port (80188+)
- POP - Pop Word off Stack
- POPA/POPAD - Pop All Registers onto Stack (80188+)
- POPF/POPFD - Pop Flags off Stack
- PUSH - Push Word onto Stack
- PUSHA/PUSHAD - Push All Registers onto Stack (80188+)
- PUSHF/PUSHFD - Push Flags onto Stack
- RCL - Rotate Through Carry Left
- RCR - Rotate Through Carry Right
- REP - Repeat String Operation
- REPE/REPZ - Repeat Equal / Repeat Zero
- REPNE/REPNZ - Repeat Not Equal / Repeat Not Zero
- RET/RETF - Return From Procedure
- ROL - Rotate Left
- ROR - Rotate Right
- SAHF - Store AH Register into FLAGS
- SAL/SHL - Shift Arithmetic Left / Shift Logical Left
- SAR - Shift Arithmetic Right
- SBB - Subtract with Borrow/Carry
- SCAS - Scan String (Byte, Word or Doubleword)
- SETAE/SETNB - Set if Above or Equal / Set if Not Below (386+)
- SETB/SETNAE - Set if Below / Set if Not Above or Equal (386+)
- SETBE/SETNA - Set if Below or Equal / Set if Not Above (386+)
- SETE/SETZ - Set if Equal / Set if Zero (386+)
- SETNE/SETNZ - Set if Not Equal / Set if Not Zero (386+)
- SETL/SETNGE - Set if Less / Set if Not Greater or Equal (386+)
- SETGE/SETNL - Set if Greater or Equal / Set if Not Less (386+)
- SETLE/SETNG - Set if Less or Equal / Set if Not greater or Equal (386+)
- SETG/SETNLE - Set if Greater / Set if Not Less or Equal (386+)
- SETS - Set if Signed (386+)
- SETNS - Set if Not Signed (386+)
- SETC - Set if Carry (386+)
- SETNC - Set if Not Carry (386+)
- SETO - Set if Overflow (386+)
- SETNO - Set if Not Overflow (386+)
- SETP/SETPE - Set if Parity / Set if Parity Even (386+)
- SETNP/SETPO - Set if No Parity / Set if Parity Odd (386+)
- SGDT - Store Global Descriptor Table (286+ privileged)
- SIDT - Store Interrupt Descriptor Table (286+ privileged)
- SHL - Shift Logical Left
- SHR - Shift Logical Right
- SHLD/SHRD - Double Precision Shift (386+)
- SLDT - Store Local Descriptor Table (286+ privileged)
- SMSW - Store Machine Status Word (286+ privileged)
- STC - Set Carry
- STD - Set Direction Flag
- STI - Set Interrupt Flag (Enable Interrupts)
- STOS - Store String (Byte, Word or Doubleword)
- STR - Store Task Register (286+ privileged)
- SUB - Subtract
- TEST - Test For Bit Pattern
- VERR - Verify Read (286+ protected)
- VERW - Verify Write (286+ protected)
- WAIT/FWAIT - Event Wait
- WBINVD - Write-Back and Invalidate Cache (486+)
- XCHG - Exchange
- XLAT/XLATB - Translate
- XOR - Exclusive OR
- LES - Load Pointer Using ES
Autorzy:
Dryobates
LKS
Vogel
Wirek



Szkoda że ja niemam czasu na pisanie programów w asm