Programowanie w języku Assembler

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)


 
OpisLiczba cykli zegara
Przesunięcie6
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



  1. AAA - Ascii Adjust for Addition
  2. AAD - Ascii Adjust for Division
  3. AAM - Ascii Adjust for Multiplication
  4. AAS - Ascii Adjust for Subtraction
  5. ADC - Add With Carry
  6. ADD - Arithmetic Addition
  7. AND - Logical And
  8. ARPL - Adjusted Requested Privilege Level of Selector (286+ PM)
  9. BOUND - Array Index Bound Check (80188+)
  10. BSF - Bit Scan Forward (386+)
  11. BSR - Bit Scan Reverse (386+)
  12. BSWAP - Byte Swap (486+)
  13. BT - Bit Test (386+)
  14. BTC - Bit Test with Compliment (386+)
  15. BTR - Bit Test with Reset (386+)
  16. BTS - Bit Test and Set (386+)
  17. CALL - Procedure Call
  18. CBW - Convert Byte to Word
  19. CDQ - Convert Double to Quad (386+)
  20. CLC - Clear Carry
  21. CLD - Clear Direction Flag
  22. CLI - Clear Interrupt Flag (disable)
  23. CLTS - Clear Task Switched Flag (286+ privileged)
  24. CMC - Complement Carry Flag
  25. CMP - Compare
  26. CMPS - Compare String (Byte, Word or Doubleword)
  27. CMPXCHG - Compare and Exchange
  28. CWD - Convert Word to Doubleword
  29. CWDE - Convert Word to Extended Doubleword (386+)
  30. DAA - Decimal Adjust for Addition
  31. DAS - Decimal Adjust for Subtraction
  32. DEC - Decrement
  33. DIV - Divide
  34. ENTER - Make Stack Frame (80188+)
  35. ESC - Escape
  36. HLT - Halt CPU
  37. IDIV - Signed Integer Division
  38. IMUL - Signed Multiply
  39. IN - Input Byte or Word From Port
  40. INC - Increment
  41. INS - Input String from Port (80188+)
  42. INT - Interrupt
  43. INTO - Interrupt on Overflow
  44. INVD - Invalidate Cache (486+)
  45. INVLPG - Invalidate Translation Look-Aside Buffer Entry (486+)
  46. IRET/IRETD - Interrupt Return
  47. Jxx - Jump Instructions Table
  48. JCXZ/JECXZ - Jump if Register (E)CX is Zero
  49. JMP - Unconditional Jump
  50. LAHF - Load Register AH From Flags
  51. LAR - Load Access Rights (286+ protected)
  52. LDS - Load Pointer Using DS
  53. LEA - Load Effective Address
  54. LEAVE - Restore Stack for Procedure Exit (80188+)




  55. POP - Pop Word off Stack
  56. POPA/POPAD - Pop All Registers onto Stack (80188+)
  57. POPF/POPFD - Pop Flags off Stack
  58. PUSH - Push Word onto Stack
  59. PUSHA/PUSHAD - Push All Registers onto Stack (80188+)
  60. PUSHF/PUSHFD - Push Flags onto Stack
  61. RCL - Rotate Through Carry Left
  62. RCR - Rotate Through Carry Right
  63. REP - Repeat String Operation
  64. REPE/REPZ - Repeat Equal / Repeat Zero
  65. REPNE/REPNZ - Repeat Not Equal / Repeat Not Zero
  66. RET/RETF - Return From Procedure
  67. ROL - Rotate Left
  68. ROR - Rotate Right
  69. SAHF - Store AH Register into FLAGS
  70. SAL/SHL - Shift Arithmetic Left / Shift Logical Left
  71. SAR - Shift Arithmetic Right
  72. SBB - Subtract with Borrow/Carry
  73. SCAS - Scan String (Byte, Word or Doubleword)
  74. SETAE/SETNB - Set if Above or Equal / Set if Not Below (386+)
  75. SETB/SETNAE - Set if Below / Set if Not Above or Equal (386+)
  76. SETBE/SETNA - Set if Below or Equal / Set if Not Above (386+)
  77. SETE/SETZ - Set if Equal / Set if Zero (386+)
  78. SETNE/SETNZ - Set if Not Equal / Set if Not Zero (386+)
  79. SETL/SETNGE - Set if Less / Set if Not Greater or Equal (386+)
  80. SETGE/SETNL - Set if Greater or Equal / Set if Not Less (386+)
  81. SETLE/SETNG - Set if Less or Equal / Set if Not greater or Equal (386+)
  82. SETG/SETNLE - Set if Greater / Set if Not Less or Equal (386+)
  83. SETS - Set if Signed (386+)
  84. SETNS - Set if Not Signed (386+)
  85. SETC - Set if Carry (386+)
  86. SETNC - Set if Not Carry (386+)
  87. SETO - Set if Overflow (386+)
  88. SETNO - Set if Not Overflow (386+)
  89. SETP/SETPE - Set if Parity / Set if Parity Even (386+)
  90. SETNP/SETPO - Set if No Parity / Set if Parity Odd (386+)
  91. SGDT - Store Global Descriptor Table (286+ privileged)
  92. SIDT - Store Interrupt Descriptor Table (286+ privileged)
  93. SHL - Shift Logical Left
  94. SHR - Shift Logical Right
  95. SHLD/SHRD - Double Precision Shift (386+)
  96. SLDT - Store Local Descriptor Table (286+ privileged)
  97. SMSW - Store Machine Status Word (286+ privileged)
  98. STC - Set Carry
  99. STD - Set Direction Flag
  100. STI - Set Interrupt Flag (Enable Interrupts)
  101. STOS - Store String (Byte, Word or Doubleword)
  102. STR - Store Task Register (286+ privileged)
  103. SUB - Subtract
  104. TEST - Test For Bit Pattern
  105. VERR - Verify Read (286+ protected)
  106. VERW - Verify Write (286+ protected)
  107. WAIT/FWAIT - Event Wait
  108. WBINVD - Write-Back and Invalidate Cache (486+)
  109. XCHG - Exchange
  110. XLAT/XLATB - Translate
  111. XOR - Exclusive OR


Autorzy:



5 komentarzy

eloar 2008-06-27 00:37

co znaczy "privileged"? konieczny CPL==0?

TKW 2004-08-26 17:08

Jest to ważne źródło przy pisaniu OS.

KKKas 2002-12-08 18:54

Moze byc, ale szkoda, ze nie wszystko przetlumaczone na PL. Ale z drugiej strony dobrze, ze chociaz tyle ;)

eSka 2002-11-28 10:30

Dry brawo jednak wkręcił Ci się assembler :)))
Szkoda że ja niemam czasu na pisanie programów w asm :((( Ale moje gratulacje :))

anubis 2002-11-19 10:49

bardzo ladny spis - pogratulowac wytrwalosci w tworzeniu