Postać instrukcji assemblerowej opisana jest też w 
 punkcie drugim niniejszego 
dokumentu.
 Ogólne zasady opisano  również tam. 
 Dla przypomnienia : używamy '%' przed nazwą rejestrów (%% gdy używamy rozszerzonego asma)
np : %ebx,%ecx,%edx, %esi,%edi,%ebp,%esp... Używamy '$' przed stałą. 
 Używamy  przyrostków określających typ argumentów,
mianowicie 'b' by określić że argument ma długość jednego bajtu (np char), 'w' jeśli
ma długość dwóch bajtów, 'l' jeśli ma długość czterech bajtów (np int).
  Możemy używać etykiet, do których później możemy skakać
instrukcjami  loop  czy też  jmp . Etykietą
jest dowolny ciąg znaków zakończony ':' czyli dwukropkiem. Nazwa etykiety musi 
występować samotnie w linii.
 
 Następujące oznaczenia zostały przyjęte do oznaczania typu argumentów:
 
	 imm - stała 
	 reg - rejestr 
	 mem - adres 
	 mmxreg - rejestr MMX 
	 fpureg - rejestr koprocesora 
Liczba następująca po takim oznaczeniu, jedna z : 8,16,32,64 i oznacza typ
operandu - że ma być traktowany jako liczba odpowiednio 8-bitowa itd.
 Oznaczenia rejestrów: 
	 %mm0-%%mm7 - 8 rejstrów MMX (64-bitowe)
	 %st0-%st7 - 8 rejestrów koprocesora
 
rejestry ogólnego przeznaczenia :
	 %cl,%bl,%al,%dl - rejstry 8-bitowe
	 %ch,%bh,%ah,%dh - rejestry 8-bitowe, starsze 8 bitów
	rejestrów ex, ax itd. 
	 %ex,%ax,%dx,%bx - rejstry 16- bitowe
	 %edx,%ecx,%eax,%ebx - rejestry 32 bitowe
rejestry wskaźnikowe: 
	 %esp (stack pointer),%ebp(frame pointer)
rejestry indeksowe 
	 %esi,%edi
rejestry segmentowe
	 %ss,%cs,%ds,%es,%gs,%fs (stack,code,4*data)
rejestry kontrolne
	 %cr0, %cr2, %cr3 (?) 
rejestry testowe 
	 %tr6-7 
rejstry do debugingu
	 %db0-7 
 
%eax- inaczej akumulator, często wykorzystywany w operacjach arytmetycznych.
 %ecx - wykorzystywany często w pętlach 
%ebx - wskaźnik do danych w segmencie %ds. 
%edx - wskaźnik wejścia/wyjścia 
%esi : wskaźnik do danych w segmencie %ds. Źródło w operacjach
na  łańcuchach  
%edi : wskaźnik do danych w segmencie %es . Przeznaczenie
w operacjach na  łańcuchach. 
%esp : wskaźnik na stos 
%ebp : wskaźnik na dane na stosie 
Dodatkowo : wskaźnik rozkazów ip, (pokazujący następną instrukcję do wykonania, nie zajmuj się nim,
ja nigdy się nim nie zajmowałem) rejestr  znaczników w których ważne dla nas są:
CF - wskaźnik przeniesienia, PF - wskaźnik parzystości, AF - wskaźnik przeniesienia
pomocniczego, ZF - wskaźnik zera (uzywany chyba najczęściej), SF -wskaźnik znaku.
 Dodatkowo są rejestry : Control registers, Test registers, Debug registers.
Nigdy ich nie używałem i mogę się tylko domyślać do czego służą. Jeśli ktoś wie,
zna przykłady wykorzystania proszę o kontakt. 
 Jak już wspomniałem, kiepski ze mnie assemblerowiec, więc nie wszystkie
opisane w dodatku instrukcje znam i używam. Te które używam, które sprawdziłem
z gcc i których działania jestem pewien, zaznaczone są w spisie symbolem (#).
 Opis każdej komendy wygląda następująco :
 NAZWA  
  dostępna: 386/486/PPro/MMX/PII  
  liczba mikrokodów:  
  komenda sprawdzona/ komenda niesprawdzona 
Opis: 
Patrz też: 
kategoria: 
Liczbę mikrokodów zaczerpnąłem z dokumentu 'optimize.pdf' z 
strony  www.intel.com/design/manuals.
Chętnie bym się dowiedział
czy nie ma tam jakichś pomyłek, i jak się ma ilość mikrokodów
do liczby taktów w trakcie których wykonywana jest instrukcja
(Tak jak to podane jest w książce np. A.Marciniaka).
Mogę tylko podejrzewać, że liczba mikrokodów, podana w instrukcji intelowskiej
jest liczbą opcodów na jakie tłumaczona jest instrukcja, ew. liczbę bajtów może 
i nijak ma się do ilości taktów (cykli zegarowych) czyli czasu wykonania tej instrukcji.
Tak czy inaczej informację tę należy traktować z przymrużeniem oka, jako wskazówkę
zaledwie która instrukcja jest krótsza, a która dłuższa.
Jeżeli instrukcja jest nie sprawdzona przeze mnie, to podchodź podejrzliwie
do podanej kolejności operandów. Pamiętaj, korzystałem z dokumentacji
w których zawsze korzystano z składni intelowskiej, podczas gdy w gcc 
korzystamy z składni unixowej ( Żeby było śmieszniej, nie jestem na sto
procent pewien, że tak jest zawsze.)Czasami chciało mi się to poprawiać, ale
znacznie częściej nie :) Sorry :). Jeżeli znasz się dobrze na asmie
w notacji unixowej, proszę, skontaktuj się ze mną, żebym mógł poprawić
ewentualne błędy
Niektóre instrukcje nie są w ogóle przyjmowane przez gcc, np. retf. Jako takie
nie zostały wymienione w tym spisie.
 
   do spisu treści   
  Oznaczenia
 
(#) instrukcja sprawdzona przeze mnie ( na 100% jestem pewien jej działania ) 
(+) instrukcja zawarta w spisie tematycznym 
(*) instrukcja opisana 
- 
 AAA + * 
 AAD + *
 AAM + *
 AAS + *
 ADC + *
 ADD + * #
 AND + * #
 ARPL + *
 BOUND + *
 BSF + * #
 BSR + * #
 BSWAP + * #
 BT + * #
 BTC + * #
 BTR + * #
 BTS + * #
 CALL + *
 CBW + *
 CDQ + *
 CLC + *
 CLD + *
 CLI + * #
 CLTS + *
 CMC + *
 CMOV + *
 CMP + * #
 CMPSB + *
 CMPSL + *
 CMPSW + *
 CMPXCHG + *
 CMPXCHG8B + *
 CPUID + * #
 CWD + *
 CWDE + *
 DAA + *
 DAS + *
 DEC + * #
 DIV + * #
 EMMS  + *
 ENTER + *
 FABS + *
 FADD + *
 FADDP + *
 FBLDP + *
 FBSTP + *
 FCHS + *
 FCLEX + *
 FCMOV + *
 FCOM + *
 FCOMI + *
 FCOMIP + *
 FCOMP + *
 FCOMPP + *
 FCOS + *
 FDECSTP + *
 FDISI + *
 FDIV + *
 FDIVP + *
 FDIVR + *
 FDIVRP + *
 FENI + *
 FFREE + *
 FIADD + *
 FICOM + *
 FICOMP + *
 FIDIV + *
 FIDIVR + *
 FILD + *
 FIMUL + *
 FINCSTP + *
 FINIT + *
 FIST + *
 FISTP + *
 FISUB + *
 FLD + *
 FLDCW + * #
 FLDENV + *
 FLDxx + *
 FMUL + *
 FMULP + *
 FNINIT + *
 FNCLEX + *
 FNDISI + *
 FNOP + *
 FPATAN + *
 FPREM + *
 FPREM1 + *
 FPTAN + *
 FRNDINT + *
 FRSTOR + *
 FSAVE + *
 FSCALE + *
 FSETPM + *
 FSIN + *
 FSINCOS + *
 FSQRT + *
 FST + *
 FSTCW + * #
 FSTENV + *
 FSTP + *
 FSTSW + *
 FSUB + *
 FSUBP + *
 FSUBR + *
 FSUBRP + *
 FTST + *
 FUCOM + *
 FUCOMI + *
 FUCOMIP + *
 FXAM + *
 FXCH + *
 FxDISI + *
 FxENI + *
 F2XM1 + *
 FXTRACT + *
 FYL2X + *
 FYL2XP1 + *
 HLT + *
 IBTS + *
 ICEBP + *
 IDIV + *
 IMUL + * #
 IN + *
 INC + * #
 INSB + *
 INSL + *
 INSW + *
 INT + *
 INT01 + *
 INT1 + *
 INT3 + *
 INTO + *
 INVD + *
 INVLPG + *
 IRET + *
 IRETD + *
 IRETW + *
 Jcc + * #
 JCXZ + * #
 JECXZ + * #
 JMP + * #
 LAHF + *
 LAR + *
 LDS + *
 LEA + * #
 LEAVE + *
 LES + *
 LFS + *
 LGDT + *
 LGS + *
 LIDT + *
 LLDT + *
 LMSW + *
 LOADALL *
 LOCK + *
 LODSB + *
 LODSD + *
 LODSW + *
 LOOP + * #
 LOOPE + * #
 LOOPNE + * #
 LOOPNZ + * #
 LOOPZ + * #
 LSL *
 LSS + *
 LTR + *
 MOV + * #
 MOVD + * #
 MOVQ + * #
 MOVSB + *
 MOVSL + *
 MOVSW + *
 MOVSX + *
 MOVZX + *
 MUL + * #
 NEG + * #
 NOP + * #
 NOT + * #
 OR + * #
 OUT + *
 OUTSB + *
 OUTSL + *
 OUTSW + *
 PACKSSDW + *
 PACKSSWB + *
 PACKUSWB + *
 PADDSIW + *
 PADDxx + *
 PAND + *
 PANDN + *
 PAVEB + *
 PCMP + *
 PDISTIB + *
 PMACHRIW + *
 PMADDWD + *
 PMAGW + *
 PMULHRIW + *
 PMULHRW + *
 PMULHW + *
 PMULLW + *
 PMVccZB + *
 POP + * #
 POPAx + *
 POPFx + *
 POR + *
 PSLLx + *
 PSRAx + *
 PSRLx + *
 PSUBSIW + *
 PSUBxx + *
 PUNPCKxx + *
 PUSH + * #
 PUSHAx + *
 PUSHFx + *
 PXOR + *
 RCL + *
 RCR + *
 RDMSR *
 RDPMC *
 RDTSC *
 REP + *
 RET + *
 ROL + *
 ROR + *
 RSM *
 SAHF + *
 SAL + *
 SAR + *
 SBB + *
 SCASB *
 SCASL *
 SCASW *
 SETcc + * #
 SGDT + *
 SHL + *
 SHLD + *
 SHR + *
 SHRD + *
 SIDT + *
 SLDT + *
 SMI *
 SMSW + *
 STC + *
 STD + *
 STI + *
 STOSB + *
 STOSL + *
 STOSW + *
 STR + *
 SUB + * #
 TEST + *
 VERR *
 VERW *
 WAIT + *
 WBINVD + *
 WRSMR *
 XADD + *
 XBTS *
 XCHG + *
 XLATB + *
 XOR + *
 
   do spisu treści   
 Niektóre instrukcje mogą się znaleźć równocześnie w kilku kategoriach, np
instrukcje MMX (kategoria MMX i arytmetyczne).Nie wszystkie instrukcje
ujęte w spisie alfabetycznym znajdują się w spisie tematycznym (nie żebym był
leniwy) 
 Kategorie : - 
 Instrukcje MMXInstrukcje specyficzne dla Pentium/Pentium Pro/Pentium IIIntrukcje arytmetyczne Instrukcje koprocesora - zmiennoprzecinkowe  Instrukcje operujące na liczbach całkowitych Instrukcje łańcuchoweInstrukcje logiczneInstrukcje skoków, pętli i porównań Instrukcje wejścia-wyjścia Instrukcje manipulujące danymi Instrukcje przerwań Inne instrukcje
 - 
  Instrukcje MMX EMMS
 MOVD
 MOVQ
 PACKSSDW
 PACKSSWB
 PACKUSWB
 PADDSIW  - Cyrix
 PADDxx
 PAND
 PANDN
 PAVEB  - Cyrix
 PCMP
 PDISTIB  - Cyrix
 PMACHRIW  - Cyrix
 PMADDWD
 PMAGW  - Cyrix
 PMULHRIW  - Cyrix
 PMULHRW - Cyrix
 PMULHW
 PMULLW
 PMVccZB  - Cyrix
 POR
 PSLLx
 PSRAx
 PSRLx
 PSUBSIW - Cyrix
 PSUBxx
 PUNPCKxx
 PXOR
 
 -  Instrukcje manipulujące danymi 
CMOVcc
 IN 
 MOV 
 MOVD 
 MOVQ 
 MOVSB 
 MOVSL 
 MOVSW 
 MOVSX 
 MOVZX 
 PACKSSDW 
 PACKSSWB 
 PACKUSWB 
 POP 
 POPAx 
 POPFx 
 PUNPCKxx 
 PUSH 
 PUSHAx 
 PUSHFx 
 -  Instrukcje wejścia-wyjścia 
IN
 INSB 
 INSL 
 INSW 
 OUT 
 OUTSB 
 OUTSL 
 OUTSW 
  -   Instrukcje arytmetyczne 
AAA
 AAD 
 AAM 
 AAS 
 ADC 
 ADD 
 DAA 
 DAS 
 DEC 
 DIV 
 IDIV 
 IMUL 
 INC 
 MUL 
 PADDxx 
 PMADDWD 
 PMULHW 
 PMULLW 
 PSUBxx 
 SBB 
 SUB 
 XADD 
 XCHG 
 XLATB 
 
  -  Instrukcje koprocesora - zmiennoprzecinkowe 
FABS
 FADD 
 FADDP 
 FBLDP 
 FBSTP 
 FCHS 
 FCLEX 
 FCMOV 
 FCOM 
 FCOMI 
 FCOMIP 
 FCOMP 
 FCOMPP 
 FCOS 
 FDECSTP 
 FDISI  
 FDIV 
 FDIVP 
 FDIVR 
 FDIVRP 
 FENI  
 FFREE 
 FIADD
 FICOM 
 FICOMP 
 FIDIV 
 FIDIVR 
 FILD 
 FIMUL 
 FINCSTP 
 FINIT 
 FIST 
 FISTP 
 FISUB 
 FLD 
 FLDxx 
 FLDCW 
 FLDENV 
 FLDxx 
 FMUL 
 FMULP 
 FNINIT 
 FNOP 
 FPATAN 
 FPREM 
 FPREM1 
 FPTAN 
 FRNDINT 
 FRSTOR 
 FSAVE 
 FSCALE 
 FSETPM 
 FSIN 
 FSINCOS 
 FSQRT 
 FST 
 FSTCW 
 FSTENV 
 FSTP 
 FSTSW 
 FSUB 
 FSUBP 
  
 FSUBR 
 FSUBRP 
 FTST 
 FUCOM 
 FUCOMI 
 FUCOMIP 
 FXAM 
 FXCH 
 FxDISI 
 FxENI 
 F2XM1 
 FXTRACT 
 FYL2X 
 FYL2XP1 
 
  -   Instrukcje operujące na liczbach całkowitych 
AAA
 AAD 
 AAM 
 AAS 
 ADC 
 ADD 
 AND 
 BSF 
 BSR 
 BSWAP 
 BT 
 BTC 
 BTR 
 BTS 
 CBW 
 CDQ 
 CMP 
 CMPXCHG 
 CMPXCHG8B 
 CWD 
 CWDE 
 DAA 
 DAS 
 DEC 
 DIV 
 FIADD  
 FIDIV  
 FIDIVR  
 FIMUL 
 FISUB 
 FLD 
 FLDxx 
 IDIV 
 IMUL 
 INC 
 MUL 
 NEG 
 NOT 
 RCL 
 RCR 
 ROL 
 ROR 
 SAL 
 SAR 
 SHL 
 SHLD 
 SHR 
 SHRD 
 SBB 
 SETcc 
 SUB 
 TEST 
 XADD 
 XCHG 
 XLATB 
 XOR 
 
  -   Instrukcje logiczne 
AND
 BSF 
 BSR 
 BT 
 BTC 
 BTR 
 BTS 
 NEG 
 NOT 
 PAND 
 PANDN 
 PCMP 
 PSLLx 
 PSRAx 
 PSRLx 
 PXOR 
 RCL 
 RCR 
 ROL 
 ROR 
 SAL 
 SAR 
 SHL 
 SHLD 
 SHR 
 SHRD 
 SETcc 
 TEST 
 XOR 
 
  -   Instrukcje specyficzne dla Pentium/
Pentium Pro/Pentium II 
CMOVcc
 CMPXCHG8B 
 FCMOV 
 FCOMI 
 FCOMIP 
 FUCOMI 
 FUCOMIP 
 ICEBP 
 
 
  -   Instrukcje skoków, pętli i porównań
CMOVcc
 CMP 
 CMPSB 
 CMPSL 
 CMPSW 
 CMPXCHG 
 CMPXCHG8B 
 Jcc 
 JCXZ 
 JECXZ 
 JMP 
 LOOP 
 LOOPE 
 LOOPNE 
 LOOPNZ 
 LOOPZ 
 
 
  -  Instrukcje łańcuchowe
CMPSB
 CMPSL 
 CMPSW 
 INSB 
 INSL 
 INSW 
 LODSB 
 LODSD 
 LODSW 
 OUTSB 
 OUTSD 
 OUTSW 
 STOSB 
 STOSL 
 STOSW 
 
  -   Instrukcje przerwań
FDISI
 FENI  
 CLI  
 ICEBP 
 INT 
 INT01 
 INT1 
 INT3 
 INTO 
 IRET 
 IRETD 
 IRETW 
 STI  
 
  -   Inne instrukcje 
ARPL
 BOUND 
 CALL 
 CLC 
 CLD 
 CLI 
 CLTS 
 CMC 
 CPUID 
 EMMS 
 ENTER 
 HLT 
 IBTS 
 INVD 
 INVLPG 
 LAHF 
 LAR 
 LEA 
 LEAVE 
 LDS  
 LES  
 LFS  
 LGS  
 LGDT  
 LIDT  
 LLDT  
 LMSW  
 LOCK 
 LSS  
 LTR  
 NOP 
  REP 
  RET 
 SAHF 
 SGDT  
 SIDT  
 SLDT  
 SMSW  
 STC 
 STD 
 STI 
 STR 
 WAIT 
 WBINVD 
 
 AAA 
  Dostępna: od 386  
  Liczba Mikrokodów: 1  
  komenda niesprawdzona  
Składnia: aaa 
Opis: Powinna być używana po użyciu komendy  ADD , której 
wynik był umieszczony w %al. Jej celem jest sprawdzenie, czy nastąpiło
przepełnienie przy dodawaniu (np 16+16 = wynik to 32 i nie mieści się 
w rejestrze %al). Używana jest przy operacjach na liczbach w rozpakowanym
formacie BCD (gdzie binarnie kodujemy liczby dziesiętnie, tzn :
1000 1000 zwykle to 128+8=136, ale w kodowaniu BCD byłoby to 88). Gdy dokonujemy
operacji na liczbach w spakowanym formacie BCD, powinniśmy używać zamiast tej 
instrukcji poleceń  DAA  lub  DAS . 
Nigdy poza UTK (zajęciami z układów techniki cyfrowej) i tym podobnych
nie zajmowałem się liczbami w formacie BCD. Podobno łatwo liczby te tłumaczyć
do formatu ASCII i z powrotem. 
Jeżeli cztery mniej znaczące bity AL są większe od 9 lub AF jest równe 1, 
to do %al jest dodawane 6, cztery bardziej znaczące bity AL są zerowane,
AH jest zwiększane o 1, a AF i CF przyjmują wartość 1. 
Patrz też:  AAD ,
 AAS , AAM  
 DAA ,  DAS  
  
Kategoria:  
 Instrukcje Arytmetyczne 
 Instrukcje operujące na licznach całkowitych 
 AAD 
  Dostępna: od 386  
  Liczba Mikrokodów: 3  
  komenda niesprawdzona  
Składnia: aad 
 aad imm 
Opis: Instrukcja powinna być wykonana przed dwójkowym dzieleniem dwóch operandów
wyrażonych w rozpakowanym kodzie BCD (iloraz również jest wtedy wyrażony w tym kodzie).
Do %al jest dodawana wartość 10*%ah, a %ah ustawiana jest na zero. Jest to 
w operacja odwrotna do AAM.
 AAS , AAM  
 DAA ,  DAS  
  
Kategoria:  
 Instrukcje Arytmetyczne 
 Instrukcje operujące na licznach całkowitych 
 AAM 
 
  Dostępna: od 386  
  Liczba Mikrokodów: 4  
  komenda niesprawdzona  
Składnia: aam 
  amm imm 
Opis : Instrukcję tą powinieneś wykonać po pomnożeniu dwu liczb w formacie
rozpakowanym BCD i pozostawieniu rezultatu w %al. Dzieli %al przez dziesięć
i pozostawia wynik w %ah, a resztę z dzielenia w %al. Zamiast dzielić przez 
dziesieć można podzielić przez dowolną stałą. Np. "aam 16\n" spowoduje
że dwie czwórki bitów (ang. nibbles) z rejestru %al zostaną rozdzielone między
%ah i %al. 
Patrz też:  AAD ,
 AAS , AAA  
 DAA ,  DAS  
  
Kategoria:  
 Instrukcje Arytmetyczne 
 Instrukcje operujące na licznach całkowitych 
 AAS 
  Dostępna: od 386  
  Liczba Mikrokodów: 1  
  komenda niesprawdzona  
Składnia: aas
Opis: Powinna być używana po użyciu komendy  SUB , której 
wynik był umieszczony w %al. Jej celem jest sprawdzenie, czy nie nastąpił
niedomiar przy odejmowaniu. 
Uzywana jest przy operacjach na liczbach w rozpakowanym
formacie BCD (gdzie binarnie kodujemy liczby dziesiętnie, tzn :
1000 1000 zwykle to 128+8=136, ale w kodowaniu BCD byłoby to 88). Gdy dokonujemy
operacji na liczbach w spakowanym formacie BCD, powinniśmy używać zamiast tej 
instrukcji poleceń  DAA  lub  DAS . 
Nigdy poza UTK (zajęciami z układów techniki cyfrowej) i tym podobnych
nie zajmowałem się liczbami w formacie BCD. Podobno łatwo liczby te tłumaczyć
do formatu ASCII i z powrotem. 
Jeżeli cztery mniej znaczące bity AL są większe od 9 lub AF jest równe 1, 
to do %al jest dodawane 6, cztery bardziej znaczące bity AL są zerowane,
AH jest zmniejszane o 1, a AF i CF przyjmują wartość 1. 
Patrz też:  AAD ,
 AAM , AAA  
 DAA ,  DAS  
  
Kategoria:  
 Instrukcje Arytmetyczne 
 Instrukcje operujące na licznach całkowitych 
 ADC 
 
  Dostępna: od 386  
  Liczba Mikrokodów: różnie dla różnej składni, patrz niżej  
  komenda niesprawdzona  
 składnia : - 
adc %al,imm8 : 2 
 adc %eax,imm16/32 : 2
 adc m16/32,imm16/32 : 4
 adc m16/32, r16/32 : 4
 adc m8,imm8 : 4
 adc m8,r8 : 4
 adc r16/32,imm16/32 : 2
 adc r16/32,m16/32 : 3
 adc r16/32,rm16/32: 2
 adc r8,m8 : 2
 adc r8,imm8 : 3
 adc r8,rm8 : 2
 adc rm16/32,r16/32 : 3
 adc rm8,r8 : 2
 
Opis: Instrukcja ta dodaje dwie liczby całkowite, do wyniku dodaje CF
i wynik umieszcza w operandzie "przeznaczenie", czyli w notacji
intelowskiej- pierwszym w notacji unixowej - w drugim. Prxy okazji -
czy ktoś wie co znaczy "rm"? W opisie mikrokodów wyżej stosuję notację 
intelowską (najpierw przeznaczenie, potem źródło) bo tak łatwiej
mi przepisuje sie z dokumentacji. Flaga CF jest ustawiana jeżeli znowu
nastąpi przepełnienie.
Patrz też:  ADD 
Kategoria : 
 Instrukcje Arytmetyczne 
 Instrukcje operujące na licznach całkowitych 
 ADD 
 
  Dostępna: od 386  
  Liczba Mikrokodów: różnie dla różnej składni, patrz niżej  
  komenda niesprawdzona  
 składnia : - 
add %al,imm8 : 1 
 add %eax,imm16/32 : 1
 add m16/32,imm16/32 : 4
 add m16/32, r16/32 : 4
 add m8,imm8 : 4
 add m8,r8 : 4
 add r16/32,imm16/32 : 1
 add r16/32,imm8 : 1
 add r16/32,m16/32: 2
 add r16/32,rm16/32 : 1
 add r8,imm8 : 1
 add r8,m8 : 2
 add r8,rm8 : 1
 add rm16/32,r16/32 : 1
 add rm8,r8 : 1
 
Opis: Instrukcja ta dodaje dwie liczby całkowite 
i wynik umieszcza w operandzie "przeznaczenie", czyli w notacji
intelowskiej- pierwszym w notacji unixowej - w drugim. Przy okazji -
czy ktoś wie co znaczy "rm"? W opisie mikrokodów wyżej stosuję notację 
intelowską (najpierw przeznaczenie, potem źródło) bo tak łatwiej
mi przepisuje sie z dokumentacji. Flaga CF jest ustawiana jeżeli 
nastąpi przepełnienie.
Przykład :  movl $2,%eax \n addl $2,%eax  wynik : w %eax jest 4 .
Patrz też:  ADC ,  XADD ,
 FADD ,  FIADD  
Kategoria : 
 Instrukcje Arytmetyczne 
 Instrukcje operujące na licznach całkowitych 
 AND 
  Dostępna: od 386  
  Liczba Mikrokodów: 3  
  komenda niesprawdzona  
 Składnia: 
-  
and %al,imm8 : 1 
 and %eax,imm16/32 : 1
 and m16/32,imm16/32 : 4
 and m16/32, r16/32 : 4
 and m8,imm8 : 4
 and m8,r8 : 4
 and r16/32,imm16/32 : 1
 and r16/32,imm8 : 1
 and r16/32,m16/32: 2
 and r16/32,rm16/32 : 1
 and r8,imm8 : 1
 and r8,m8 : 2
 and r8,rm8 : 1
 and rm16/32,r16/32 : 1
 and rm8,r8 : 1
 
Opis: Boolowskie mnożenie obu operandów. Tzn, tak samo jak operator
'&' w C : 1 & 1 == 1 a 1&0. 0&0, 0&1 ==0. Identyczną operację, tyle tylko
że na liczbach typu long long, przeprowadza  PAND  . 
Wynik zostawiany jest w drugim operandzie.
Przykład :  movl $7,%ecx \n movl $3,%edx \n and %ecx,%edx 
Wynik : w %edx pozostaje 3. 
Patrz też:
 OR ,  XOR  
 NOT ,  NEG  
 POR ,  PXOR    
 PAND ,  PANDN  
Kategoria:  
 Instrukcje logiczne 
 Instrukcje operujące na licznach całkowitych 
 ARPL 
  Dostępna: od 386  
  Liczba Mikrokodów: complex  
  komenda niesprawdzona  
Składnia: arpl m16 
  arpl rm16,r16 
Opis: Jeżeli pole uprzewilejowania pierwszego operandu, którym powinien
być selector segmentu, jest mniejsze niż pole uprzewilejowania drugiego
operandu, to ZF przyjmuje wartość 1, i pole uprzewilejowania
pierwszego argumentu przyjmuje wartość odpowiedniego pola drugiego argumentu
Patrz Też: 
Kategoria :  Inne Instrukcje  
 BOUND 
  Dostępna: od 386  
  Liczba Mikrokodów: complex  
  komenda niesprawdzona  
Składnia: 
 bound r16/32,m16/32 
Opis : Instrukcja ta oczekuje, że drugi argument wskazuje na miejsce w pamięci
zawierające dwie wartości tego samego rozmiaru jak pierwszy argument (tzn.
dwa słowa gdy pierwszym argumentem jest rejestr 16-bitowy, dwa podwójne
słowa gdy pierwszym argumentem jest rejestr 32-bitowy). Jeżeli wartość
w pierwszym argumencie jest mniejsza od pierwszej wartości w pamięci, lub
większa lub równa niż druga wartość, wysyła wyjątek BR (wyjątek 5, fault -
czyli że po wystąpieniu wyjątku i wywołaniu procedury obsługi próbuje
się ponownie wykonać instrukcję która wywołała wyjątek - za "Laboratorium
systemu operacyjnego Linux ", praca zbiorowa studentów Uniwersystetu Warszawskiego. 
Tutaj widać że A.Marciniak nie rozumie różnicy między wyjątkiem a przerwaniem)
(przekroczenie
tablicy) stąd komenda ta nadaje się do testowania tablic.
 
Patrz także:
Kategoria :  Inne Instrukcje  
 BSF 
  Dostępna: od 386  
  Liczba Mikrokodów: 3 lub 2  
  komenda sprawdzona  
 Składnia: 
-  bsf im16/32,r16/32 
 bsf rm16/32,r16/32
 
Opis:  Przeszukuje pierwszy operand w poszukiwaniu ustawionego bitu
(czyli =1). Jeżeli go znajdzie, w drugim operandzie znajduje się jego index,
ZF ustawiany jest na 1. Jeżeli pierwszy operand jest równy zeru, ZF
ustawiany jest na 0. Przeszukuje od najmniej znaczącego do najbardziej 
znaczącego. Indeksy zaczynają się od 0 (najmniej znaczący bit) do 16/32
(najbardziej znaczący bit.
Przykłady : movl $3,%eax \n bsf %eax,%ecx \n
	%ecx równe jest 0.	
movl $6,%eax \n bsf %eax,%ecx \n %ecx równe jest 1.
Patrz także :  BSR   BT 
 BTC   BTR 
Kategoria :  Instrukcje logiczne ,
 Instrukcje operujące na liczbach całkowitych 
 BSR 
  Dostępna: od 386  
  Liczba Mikrokodów: 3 lub 2  
  komenda sprawdzona  
Składnia: 
 bsr m16/32,r16/32 
 	bsr rm16/32,r16/32
Opis:  Przeszukuje pierwszy operand w poszukiwaniu ustawionego bitu
(czyli =1). Jeżeli go znajdzie, w drugim operandzie znajduje się jego index,
ZF ustawiany jest na 1. Jeżeli pierwszy operand jest równy zeru, ZF
ustawiany jest na 0. Przeszukuje od najbardziej znaczącego do najmniej 
znaczącego. Indeksy zaczynają się od 0 (najmniej znaczący bit) do 16/32
(najbardziej znaczący bit. 
Przykłady : movl $3,%eax \n bsf %eax,%ecx \n
	%ecx równe jest 1.	
movl $6,%eax \n bsf %eax,%ecx \n %ecx równe jest 2.
Patrz także :  BSF   BT 
 BTC   BTR 
Kategoria :  Instrukcje logiczne ,
 Instrukcje operujące na liczbach całkowitych 
 BSWAP 
  Dostępna: od 486  
  Liczba Mikrokodów: 2  
  komenda sprawdzona  
Składnia: 
 bswap r32  
Opis: Instrukcja ta zamienia bity 0-7  z bitami 24-31, a bity 
8-15 z bitami 16-23, czyli zamienia kolejnością słowa w rejestrze.
 Przykład : movl $1,%eax \n bswap %eax  \n %eax równa się 2^24 
(bit 0 zamienił się miejscem z bitem 24 ) czyli 16777216 
Patrz też:  XCHG  
Kategoria :
 Instrukcje operujące na liczbach całkowitych 
 BT 
  Dostępna: od 386  
  Liczba Mikrokodów:  2/complex/1/1  
  komenda sprawdzona  
 Składnia: 
-  
bt imm8,reg16/32
 bt r16/32,m16/32
 bt imm8,rm16/32
 bt r16/32,rm16/32
Opis: Jeżeli bit drugiego operandu o indeksie podanym pierwszym operandem
równa się 1, CF również równa się jeden. W przeciwnym wypadku CF równa się 0.
Przykład: movl $1,%eax \n bt $0,%eax  CF równa się 1.
 Patrz też:  BTC ,  BTR 
 BTS  
Kategoria :  Instrukcje logiczne ,   
 Instrukcje operujące na liczbach całkowitych 
 BTC 
  Dostępna: od 386  
  Liczba Mikrokodów:  4/complex/1/1  
  komenda sprawdzona  
 Składnia: 
-  
btc imm8,reg16/32
 btc r16/32,m16/32
 btc imm8,rm16/32
 btc r16/32,rm16/32
Opis: Jeżeli bit drugiego operandu o indeksie podanym pierwszym operandem
równa się 1, CF również równa się jeden. W przeciwnym wypadku CF równa się 0.
Bit o podanym indeksie zostaje uzupełniony (tzn jeśli równa się 0, to
po wykonaniu będzie się równał 1, jeśli równa się 1, to będzie się równał 0)
 
Przykład: movl $1,%eax \n btc $0,%eax  CF równa się 1. %eax równa się 0
movl $5,%eax \n btc $2,%eax CF równa się 1. %eax równa się 1.
 Patrz też:  BT ,  BTR ,
 BTS 
Kategoria :  Instrukcje logiczne ,
 Instrukcje operujące na liczbach całkowitych 
 BTR 
  Dostępna: od 386  
  Liczba Mikrokodów:  4/complex/1/1  
  komenda sprawdzona  
 Składnia: 
-  
btr imm8,reg16/32
 btr r16/32,m16/32
 btr imm8,rm16/32
 btr r16/32,rm16/32
Opis: Jeżeli bit drugiego operandu o indeksie podanym pierwszym operandem
równa się 1, CF również równa się jeden. W przeciwnym wypadku CF równa się 0.
Bit o podanym indeksie zostanie wyzerowany.
Przykład: movl $1,%eax \n btr $0,%eax  CF równa się 1. %eax równa się 0.
 Patrz też:  BTC ,  BT , 
 BTS  
Kategoria :  Instrukcje logiczne ,
 Instrukcje operujące na liczbach całkowitych 
 BTS 
  Dostępna: od 386  
  Liczba Mikrokodów:  4/complex/1/1  
  komenda sprawdzona  
 Składnia: 
-  
bts imm8,reg16/32
 bts r16/32,m16/32
 bts imm8,rm16/32
 bts r16/32,rm16/32
Opis: Jeżeli bit drugiego operandu o indeksie podanym pierwszym operandem
równa się 1, CF również równa się jeden. W przeciwnym wypadku CF równa się 0.
Bit o podanym indeksie zostanie ustawiony (będzie się równał jeden)
Przykład: movl $1,%eax \n bts $0,%eax  CF równa się 1. %eax równa się 1.
 Patrz też:  BTC ,  BTR 
 BT  
Kategoria :  Instrukcje logiczne ,
 Instrukcje operujące na liczbach całkowitych 
 CALL 
  Dostępna: od 386  
  Liczba Mikrokodów:  complex   
  komenda sprawdzona  
Składnia: call  nazwa  ew. call  adres  
Opis :  Wywołuje procedurę o podanej nazwie lub zaczynającej się
pod podanym adresem. Powrót z wywołania następuje poprzez intrukcję
 RET  
Patrz także:
 RET  
Kategoria :  Inne instrukcje 
 CBW 
  Dostępna: od 386  
  Liczba Mikrokodów:  1   
  komenda sprawdzona  
Składnia: cbw 
Opis:
Rozszerza liczbę 8-bitową w %al w liczbę 16-bitową w %ax poprzez powielenie
bitu znaku - tzn, jeśli najstarszy bit %al był jeden, to %ah wypełniony jest jedynkami,
w przeciwnym razie wypełniony jest zerami. Dopuszczalna jest także nazwa 
cbtw.
Patrz także:
 CDQ  ,
 CWD  ,
 CWDE  
Kategoria :  Instrukcje operujące na liczbach całkowitych
 CDQ 
  Dostępna: od 386  
  Liczba Mikrokodów:  1   
  komenda sprawdzona  
Składnia: cdq 
Opis:
Rozszerza liczbę 32-bitową w %eax w liczbę 64-bitową w %eax:%edx poprzez powielenie
bitu znaku - tzn, jeśli najstarszy bit %eax był jeden, to %edx wypełniony jest jedynkami,
w przeciwnym razie wypełniony jest zerami. Dopuszczalna jest także nazwa cltd
(change long to double? cholera wie :)) )
Patrz także:
 CBW  ,
 CWD  ,
 CWDE  
Kategoria :  Instrukcje operujące na liczbach całkowitych
 CLC 
  Dostępna: od 386  
  Liczba Mikrokodów:  1   
  komenda niesprawdzona  
Składnia: clc 
Opis: Zeruje flagę przeniesienia (CF) 
 
Patrz też :  CLD ,  CLI 
, CLTS  ,  STC , 
STD  ,  STI ,  CMC  
Kategoria :  Inne instrukcje 
 CLD 
  Dostępna: od 386  
  Liczba Mikrokodów:  nie wiem   
  komenda niesprawdzona  
Składnia: cld 
Opis: Zeruje flagę kierunku  (DF) 
 
Patrz też :  CLC ,  CLI 
, CLTS  ,  STC , 
STD  ,  STI ,  CMC  
Kategoria :  Inne instrukcje 
 CLI 
  Dostępna: od 386  
  Liczba Mikrokodów:  complex   
  komenda sprawdzona  
   Instrukcja uprzywilejowana    
Składnia: cli 
Opis: Zeruje flagę zezwolenia na przerwanie  (IF) , uniemożliwiając
wystąpienia przerwań (za wyjątkiem NMI). Przywrócić obsługę przerwań
można komendą  STI  . Wszelkie programy które
próbowałem uruchomić z tą instrukcją kończyły się zrzuceniem core. Czyżby
tą instrukcję można było wykonywać tylko w trybie jądra? Ktoś zna
się na tym?
 
przykład : cli \n ( od tej pory ignorujemy sygnały przerwań)
Patrz też :  CLC ,  CLD 
, CLTS  ,  STC , 
STD  ,  STI ,  CMC  
Kategoria :  Inne instrukcje 
 CLTS 
  Dostępna: od 386  
  Liczba Mikrokodów:  complex   
  komenda niesprawdzona  
   Instrukcja uprzywilejowana    
Składnia: clts 
Instrukcja CLTS sluzy do skasowania bitu TS w rejestrze CR0 (MSW). Bit TS
(Task Switched) jest ustawiany przez procesor podczas przelaczania zadan. W
przypadku odwolania sie do koprocesora (instrukcja ESC i wszystkie pochodne
czyli wszystkie instrukcje koproca) gdy jest ustawiony ten bit, jest
generowany wyjatek #NM (nr 8) ostrzegajacy, ze zostalo zmienione zadanie
(zmienil sie kontekst: zawartosc rejestrow, obszar segmentow itd.) a w
rejstrach koprocesora znajduja sie jeszcze wartosci starego zadania i nalezy
je gdzies zachowac zeby nie zginely podczas powrotu do przerwanego zadania.
Powinna to wlasnie wykonac procedura obslugi wyjatku #NM, a pozniej powinna
ona skasowac bit TS (co wlasnie sie robi instrukcja CLTS) oznajmujac tym
samym ze kontekst koprocesora zostal zachowany. Instrukcja ta jest
uprzywilejowana i moze byc tylko wykonywana na zerowym poziomie ochrony (w
trybie jadra), a zwykly programista (nie systemowy) raczej nie powinien sie
nia interesowac.
Patrz też :  CLC ,  CLI 
, CLD  ,  STC , 
STD  ,  STI ,  CMC  
Kategoria :  Inne instrukcje 
 CMC 
  Dostępna: od 386  
  Liczba Mikrokodów:  1   
  komenda niesprawdzona  
Składnia: cmc 
Opis: Uzupełnia do dwóch CF, czyli jeśli wartością CF było zero, to
zmienia wartość CF na jeden, jeśli wartością CF było jeden, to przypisuje
CF wartość zero.
 
Patrz też :  CLC ,  CLI 
, CLD  ,  STC , 
STD  ,  STI  
Kategoria :  Inne instrukcje 
 CMOV 
  Dostępna: od Pentium Pro (P6)  
  Liczba Mikrokodów:  2 (między rejestrami) 3 (pamięć)   
  komenda niesprawdzona  
 Składnia: -  cmovcc r16/32,r16/32 
 cmovcc r16/32,m16/32
 
gdzie cc oznacza jeden z przyrostków:
B,NAE,C,E,Z,BE,N,L,NGE,LE,NG,NB,AE,NC,NBE,A,NE,NZ,NL,GE,NLE,G,NO,NP,PO,NS,O,P,PE,S
 opisanych tutaj
Opis : przeniesienie warunkowe. Przenieś wartość wtedy gdy... Warunek przeniesienia
zależy od użytego przerostka, np CMOVE %eax,%edx znaczy przenieś wartość z %eax 
do %edx jeśli ZF == 1.  Nie mogłem sprawdzić tej komendy gdyż jest ona charakterystyczna
dla P6. 
Patrz też :  CPUID ,
 FCMOV ,
 PRZYROSTKI 
Kategoria: 
 Instrukcje specyficzne dla Pentium/
Pentium Pro/Pentium II ,
 Instrukcje skoków, pętli i porównań
 CMP 
  Dostępna: od 386  
  Liczba Mikrokodów:  1 (pierwszy argument rejestr, a drugi rejestr lub stała)
 3 (pamięć)   
  komenda sprawdzona  
 Składnia: -  cmp r8/16/32,r8/16/32 
 cmp r8/16/32,m8/16/32 , cmp imm,r8/16/32/m8/16/32 (tam gdzie r może też być rm
Opis : Dokonuje porównania dwóch liczb. Faktycznie działa w ten sposób, że odejmuje
od pierwszego operandu drugi i nie zapamiętuje wyników, ustawiając tylko odpowiednie flagi, 
mianowicie : OF,ZF,SF,PF,AF,CF. Np. jeżeli oba operandy były sobie równe,
ustawiony jest znacznik ZF. 
Przykład :  movl $2,%ebx \n cmp $1,%ebx \n jl koniec \n movl $0,%ebx \n koniec:
 %ebx równe jest  0
Patrz też :  Jcc ,  
 FCOM ,  FICOM ,
 CMPXCHG , CMPSB ,
 FLAGI 
Kategoria: 
 Instrukcje skoków, pętli i porównań
,
 Instrukcje operujące na liczbach całkowitych  
 CMPSB 
  Dostępna: od 386  
  Liczba Mikrokodów: complex
 
  komenda niesprawdzona  
 Składnia: -  cmpsb 
 
Opis : Porównuje bajt o adresie DS:SI lub DS:ESI z bajtem o adresie 
ES:DI lub ES:EDI i w zależności od wyniku ustawia odpowiednie flagi 
(takie same jak  CMP ). Następnie, w zależności od DF
(destination flag, wskaźnika kierunku) zmniejsza (gdy DF=1) lub zwiększa
(gdy DF=0) SI i DI (lub ESI i EDI). Zdaje mi się, że można spokojnie założyć
że używamy ESI i EDI ( jako że Linux jest 32-bitowy)
Przykład :  movl $a,%esi \n movl $b,%edi \n cmpsb  
Patrz też :  CMP ,  CMPSL ,
 CMPSW ,
 FLAGI 
Kategoria: 
 Instrukcje skoków, pętli i porównań
,
 Instrukcje łańcuchowe 
 CMPSL 
  Dostępna: od 386  
  Liczba Mikrokodów: complex
 
  komenda niesprawdzona  
 Składnia: -  cmpsb 
 
Opis : Porównuje podwójne słowo o adresie DS:SI lub DS:ESI z bajtem o adresie 
ES:DI lub ES:EDI i w zależności od wyniku ustawia odpowiednie flagi 
(takie same jak  CMP ). Następnie, w zależności od DF
(destination flag, wskaźnika kierunku) zmniejsza (gdy DF=1) lub zwiększa
(gdy DF=0) SI i DI (lub ESI i EDI) o 4. Zdaje mi się, że można spokojnie założyć
że używamy ESI i EDI ( jako że Linux jest 32-bitowy)
Patrz też :  CMP ,  CMPSB ,
 CMPSW , 
 FLAGI 
Kategoria: 
 Instrukcje skoków, pętli i porównań
,
 Instrukcje łańcuchowe 
 CMPSW 
  Dostępna: od 386  
  Liczba Mikrokodów: complex
 
  komenda niesprawdzona  
 Składnia: -  cmpsw 
 
Opis : Porównuje słowo o adresie DS:SI lub DS:ESI z bajtem o adresie 
ES:DI lub ES:EDI i w zależności od wyniku ustawia odpowiednie flagi 
(takie same jak  CMP ). Następnie, w zależności od DF
(destination flag, wskaźnika kierunku) zmniejsza (gdy DF=1) lub zwiększa
(gdy DF=0) SI i DI (lub ESI i EDI) o 2. Zdaje mi się, że można spokojnie założyć
że używamy ESI i EDI ( jako że Linux jest 32-bitowy)
Przykład :  movl $a,%esi \n movl $b,%edi \n cmpsb  To działa, ale
jakim cudem? Skąd gcc wie że a ma być pod %ds:%esi  a b pod %es:%edi? Help?
Patrz też :  CMP ,  CMPSB ,
 CMPSL , 
 FLAGI 
Kategoria: 
 Instrukcje skoków, pętli i porównań
,
 Instrukcje łańcuchowe 
 CMPXCHG 
  Dostępna: od 386  
  Liczba Mikrokodów: complex
 
  komenda niesprawdzona  
 Składnia: -  cmpxchg r8/16/32,rm/r/m8/16/32 
 
Opis : Porównuje swój drugi operand z %al, %ah bądź %eax ( w zależności
od rozmiaru operandu) i jeżeli jest on równy temu rejestrowi, kopiuje
pierwszy operand do drugiego operandu. W przeciwnym wypadku ustawia ZF na
zero.
Patrz też :  CMP ,  CMPSB ,
 CMPXCHG8B ,
 CMPSL  
Kategoria: 
 Instrukcje skoków, pętli i porównań
,
 Instrukcje operujące na liczbach całkowitych 
 CMPXCHG8B 
  Dostępna: od pentium  
  Liczba Mikrokodów: complex
 
  komenda niesprawdzona  
 Składnia: -  cmpxchg8b rm64 
 
Opis : 
Porównuje swój operand z %eax:%edx 
i jeżeli liczba 64-bitowa w miejscu w pamięci określonym przez operand 
jest równa tej parze rejestrów, kopiuje parę %ecx:%ebx do miejsca w pamięci
określonego przez ten operand. Ustawia równocześni ZF na 1.
W przeciwnym wypadku ustawia ZF na
zero.
Patrz też :  CMP ,  CMPSB ,
 CMPXCHG ,
 CMPSL  
Kategoria: 
 Instrukcje skoków, pętli i porównań
,
 Instrukcje operujące na liczbach całkowitych 
 CPUID 
  Dostępna: od pentium  
  Liczba Mikrokodów: complex
 
  komenda sprawdzona  
 Składnia: -  cpuid 
 
Opis : Służy do pobierania informacji na temat procesora. Informacje te
różnią się w zależności od tego, jaką zawartość miał rejestr %eax podczas
jej wywołania, i tak:
 
  gdy %eax wynosi 0, to po wykonaniu %eax zawiera maksymalną liczbę
jaką jest w stanie zaakceptować jako parametr wejściowy dla instrukcji
cpuid (obecnie będzie to 2), a %ebx:%edx:%ecx zawierają napis określający
nazwę komputera, np "GenuineIntel"
 Jeżeli w %eax na wejściu jest 1, to na wyjściu %eax zawiera informację o wersji
procesora, a %edx rozmaite informacje, np. jeśli komputer może używać instrukcji
MMX, to ustawiony jest 23 bit rejstru %edx, jeżeli może używać warunkowych 
instrukcji cmovcc i fcmovcc, to ustawiony jest bit 15, i wreszcie bit 8 ustawiony 
jest gdy może używać instrukcji cmpxchg8b. 
 gdy %eax zawiera 2, to %eax,%ebx,%ecx i %edx zawierają informacjem na temat
cache'u i TLB. 
Przykład : patrz  przykład  w rozdziale Wykorzystanie 
instrukcji charakterystycznych
dla MMX i Pentium 
Patrz też : 
Kategoria: 
 Inne instrukcje 
 CWD 
  Dostępna: od 386  
  Liczba Mikrokodów:  1   
  komenda sprawdzona  
Składnia: cwd 
Opis:
Rozszerza liczbę 16-bitową w %ax w liczbę 32-bitową w %ax:%dx poprzez powielenie
bitu znaku - tzn, jeśli najstarszy bit %ax był jeden, to %dx wypełniony jest jedynkami,
w przeciwnym razie wypełniony jest zerami. Gcc dopuszcza także syntax AT&T czyli nazwę cwtd (change word to double jak sądzę)
Patrz także:
 CDQ  ,
 CBW  ,
 CWDE  
Kategoria :  Instrukcje operujące na liczbach całkowitych
 CWDE 
  Dostępna: od 386  
  Liczba Mikrokodów:  1   
  komenda sprawdzona  
Składnia: cwde 
Opis:
Rozszerza liczbę 16-bitową w %ax w liczbę 32-bitową w %eax poprzez powielenie
bitu znaku - tzn, jeśli najstarszy bit %ax był jeden, to górne 16 bitów %eax
wypełnione jest jedynkami,
w przeciwnym razie wypełnione jest zerami. Gcc dopuszcza także syntax AT&T,
tak przynajmniej piszą w dokumentacji, czyli cwtl (jak sądzę skrót od
change word to long).
Patrz także:
 CDQ  ,
 CWD  ,
 CBW  
Kategoria :  Instrukcje operujące na liczbach całkowitych
 DAA 
  Dostępna: od 386  
  Liczba Mikrokodów: 1  
  komenda niesprawdzona  
Składnia: daa 
Opis: Powinna być używana po użyciu komendy  ADD , której 
wynik był umieszczony w %al. Jej celem jest sprawdzenie, czy nastąpiło
przepełnienie przy dodawaniu (np 16+16 = wynik to 32 i nie mieści się 
w rejestrze %al). Używana jest przy operacjach na liczbach w spakowanym
formacie BCD (gdzie binarnie kodujemy liczby dziesiętnie, tzn :
1000 1000 zwykle to 128+8=136, ale w kodowaniu BCD byłoby to 88). Gdy dokonujemy
operacji na liczbach w rozpakowanym formacie BCD, powinniśmy używać zamiast tej 
instrukcji poleceń  AAA  lub  AAS . 
Liczby w spakowanym formacie BCD kodowane są cyfra na 4 bity, w rozpakowanym
cyfra na 8 bitów.
Nigdy poza UTK (zajęciami z układów techniki cyfrowej) i tym podobnych
nie zajmowałem się liczbami w formacie BCD. Podobno łatwo liczby te tłumaczyć
do formatu ASCII i z powrotem. 
Jeżeli cztery mniej znaczące bity AL są większe od 9 lub AF jest równe 1, 
to do %al jest dodawane 6, cztery bardziej znaczące bity AL są zerowane,
AH jest zwiększane o 1, a AF i CF przyjmują wartość 1. 
Patrz też:  AAD ,
 AAS , AAM  
 AAA ,  DAS  
  
Kategoria:  
 Instrukcje Arytmetyczne 
 Instrukcje operujące na liczbach całkowitych 
 DAS 
  Dostępna: od 386  
  Liczba Mikrokodów: 1  
  komenda niesprawdzona  
Składnia: das
Opis: Powinna być używana po użyciu komendy  SUB , której 
wynik był umieszczony w %al. Jej celem jest sprawdzenie, czy nie nastąpił
niedomiar przy odejmowaniu. 
Używana jest przy operacjach na liczbach w spakowanym
formacie BCD (gdzie binarnie kodujemy liczby dziesiętnie, tzn :
1000 1000 zwykle to 128+8=136, ale w kodowaniu BCD byłoby to 88). Gdy dokonujemy
operacji na liczbach w rozpakowanym formacie BCD, powinniśmy używać zamiast tej 
instrukcji poleceń  AAA  lub  AAS . 
Nigdy poza UTK (zajęciami z układów techniki cyfrowej) i tym podobnych
nie zajmowałem się liczbami w formacie BCD. Podobno łatwo liczby te tłumaczyć
do formatu ASCII i z powrotem. 
Liczby w sformatowanym formacie BCD posiadają 4 bity na cyfrę, podczas gdy
w rozpakowanym 8 bitów na cyfrę.
Jeżeli cztery mniej znaczące bity AL są większe od 9 lub AF jest równe 1, 
to do %al jest dodawane 6, cztery bardziej znaczące bity AL są zerowane,
AH jest zmniejszane o 1, a AF i CF przyjmują wartość 1. 
Patrz też:  AAD ,
 AAM , AAA  
 DAA ,  DAS  
  
Kategoria:  
 Instrukcje Arytmetyczne 
 Instrukcje operujące na liczbach całkowitych 
 DEC 
  Dostępna: od 386  
  Liczba Mikrokodów: 4 ( gdy argument jest m8/16/32) 1 gdy argumentem jest r /rm 8/16/32) 
  komenda niesprawdzona  
Składnia: -  dec m8/16/32 : 4 
 dec r8/16/32 : 1
 dec rm 8/16/32
 
Opis: Zmniejsza argument o jeden, czyli równoważny jest operatorowi -- w C. Nie
wywiera efektu na flagę CF. Żeby wywrzeć taki efekt, użyj polecenia 
sub  1,coś . 
Przykład :  movl $4,%eax \n decl %eax  %eax równe jest 3 
Patrz też :  INC  
 
Kategoria:  
 Instrukcje Arytmetyczne 
 Instrukcje operujące na liczbach całkowitych 
 DIV 
  Dostępna: od 386  
  Liczba Mikrokodów: 4 ( gdy 1 argument jest 16/32) 3 (gdy oba
argumenty są 8 bitowe) 
  komenda niesprawdzona  
Składnia: -  div r/m8 : 3 
 div r/m16 : 4
 div r/m32 : 4
 
Opis: Instrukcja dokonuje dzielenia całkowitego bez znaku, czyli 1/2 równa
się 0 , reszta 1 . Jeżeli argument jest 8- bitowy, instrukcja ta dzieli %ax przez dany operand.
Wynik dzielenia zostawia w %al, a reszta z dzielenia w %ah. Jeżeli argument
jest 16 bitowy, to instrukcja dzieli %dx:%ax przez argument, wynik zostawiając
w %ax, a resztę w %dx. Jeśli argument jest 32 bitowy, instrukcja dzieli
%edx:%eax przez argument, wynik zostawiając w %eax, a resztę w %edx.
Patrz też :  IDIV  (dzielenie ze znakiem)  MUL 
,  IMUL  ,  FDIV  
 
Przykład :  movw $4,%ax \n movw $2,%bx \n div %bl  wynik : 2 w %al, 0 w %ah 
Kategoria:  
 Instrukcje Arytmetyczne 
 Instrukcje operujące na liczbach całkowitych 
 EMMS 
  Dostępna: od MMX  
  Liczba Mikrokodów: - 
 
  komenda niesprawdzona  
Składnia: -  emms 
 
Opis: Instrukcja ta ustawia słowo zawartości stosu (ang. FPU tag word) 
oznaczające które rejestry
są wolne na same jedynki, co oznacza że wszystkie rejestry są wolne. Instrukcja
ta powinna być użyta zaraz po wykonaniu instrukcji MMX i przed wykonaniem instrukcji
zmiennoprzecinkowych. 
Patrz też :  
 
Kategoria:  
 Instrukcje MMX 
 Inne instrukcje 
 ENTER 
  Dostępna: ?  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  enter nat16/nat8 
 
Opis : Robi ramke na stosie, tj. zapisuje na stos ciag bajtow, zawierajacy
        wskazniki na ram na nizszym poziomie i rezerwuje miejsce na ilosc
        bajtow potrzebna na zmienne lokalne podana w argumencie pierwszym.
        Instrukcja jest uzywana przez jezyki wysokiego poziomu podczas wywolan
        funkcji (wowczas poziom ramy okresla ilosc zaglebien w wywolywaniu
        funkcji). W drugim argumencie jest ten numer kolejnego zaglebienia
        (i jednoczesnie ilosc poczatkowych wskaznikow do ram na wyzszych
        poziomach). Ta instrukcja jest dziwna, dlugo trwa i rzadko jej sie
        uzywa (kompilatory wola same organizowac sobie stos niz zeby robil to
        za nich procesor)
Patrz też :  LEAVE  
 
Kategoria:  
 Inne instrukcje 
 FABS 
  Dostępna: od 386  
  Liczba Mikrokodów: 1 
 
  komenda niesprawdzona  
Składnia: -  fabs 
 
Opis: Oblicza wartość bezwględną liczby w rejestrze %st0 i umieszcza ją
w %st0. 
 
Patrz też : 
Kategoria:  
 Instrukcje koprocesora
 FADD 
  Dostępna: od 386  
  Liczba Mikrokodów: 1/2 
 
  komenda niesprawdzona  
Składnia: -  
fadd m32real : 2
 fadd m64real : 2
 fadd st0,st(i) : 1
 fadd st(i),st0 : 1
 
Opis:
 Dodaje do siebie operandy i wynik zostawia w drugim (jeśli były dwa operandy).
Lub też dodaje operand do ST0 i wynik zostawia w ST0.
 
Patrz też :  ADD ,  FADDP ,
 FIADD ,  FSUB  
Kategoria:  
 Instrukcje koprocesora
 FADDP 
  Dostępna: od 386  
  Liczba Mikrokodów: 1/2 
 
  komenda niesprawdzona  
Składnia: -  
faddp st0,st(i) : 1 
 faddp st(i),st0 : 1
 
Opis:
 Dodaje do siebie operandy i wynik zostawia w drugim (jeśli były dwa operandy).
Następnie zdejmuje wartość z stosu koprocesora. Nie wiem po co, nie wiem gdzie.
 
Patrz też :  ADD ,  FADD  
Kategoria:  
 Instrukcje koprocesora
 FBLD  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fbld m80 
 
Opis: Powoduje załadowanie liczby w upakowanym formacie BCD z podanego adresu 
na stos koprocesora przekształcając ją na liczbę rzeczywistą. ładuje 10 bajtów.
(Czyli liczba zajmuje 80 bitów)
 
Patrz też :  FBSTP 
Kategoria:  
 Instrukcje koprocesora
 FBSTP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fbstp m80 
 
Opis : Powoduje przekształcenie liczby znajdującej sie na wierzchołku ST0
na format upakowanej liczby dziesiętnej BCD, przesłanie wyniku do adresu
podanego operandem oraz uaktualnienie wskaźnika stosu (obniża wskaźnik).
 
Patrz też :  FBLD 
Kategoria:  
 Instrukcje koprocesora
 FCHS  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fchs 
 
Opis : Zmienia znak liczby przechowywanej na wierzchołki stosu zmiennoprzecinkowego.
 
Patrz też : 
 
Kategoria:  
 Instrukcje koprocesora
 FCLEX  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fclex  
 
Opis : 
Znaczniki PE,UE,OE,ZE,DE,IE,IR, i B w  slowie 
stanu  koprocesora przyjmują wartość zero.
 
Patrz też : 
 FNCLEX 
 
Kategoria:  
 Instrukcje koprocesora
 FCMOVcc  
  Dostępna: od P6  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fcmovcc reg 
 
gdzie cc oznacza : B, BE, NBE, E, U, NU,
NE, NB. U i NU oznacza : dwie ostatnie liczby były nieporównywalne (NU) tzn były 
rózne ale nie dało się stwierdzić która z nich była większa, lub porównywalne
(U). Znacznie pozostałych przyrostków jest identyczne jak  opisano
w Dodatku na temat przyrostków .
Opis : 
Instrukcja powoduje przeniesienie zawartości rejestru na szczyt stosu jeśli
jest spełniony jej warunek.
 
Patrz też :  CMOV 
 
Kategoria:  
 Instrukcje koprocesora 
 Instrukcje specyficzne dla Pentium/Pentium Pro/Pentium II
 FCOM  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fcom mem32/64 
 fcom fpureg
 fcom fpureg,ST0
 
Opis : Porównuje dwie  liczby rzeczywiste : na wierzcholku st0 z podanym 
operandem, a jesli nie jest on podany, z st1. Bity C0 i C3 w
 
slowie statusu koprocesora  przyjmują następujące wartości: 
-  C0=0 i C3 =0 gdy ST0 > operand 
 C0 =1 C3 -0 gdy ST0 < operand
 C0=0 i C3=1 gdy ST0 == operand
 C0=1 i C3 =1 gdy St0 != operand (czyli, jak się domyślam, gdy zachodzi
sytuacja nieporównywalności oprandu i st0 np. dwie nieskończoności)
 
Patrz też :  FCOMP ,  FCOMPP , 
 FCOMI ,  FCOMIP  ,
 FICOM , FUCOM,
  CMP 
Kategoria:  
 Instrukcje koprocesora
 FCOMI  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fcomi fpureg 
 fcomi fpureg,ST0
 
Opis : Porównuje dwie  liczby rzeczywiste : na wierzcholku st0 z podanym 
operandem, a jesli nie jest on podany, z st1. Efekt jest zapisywany do 
rejestru  EFLAGS  procesora i bezpośrednio po nim
można więc wykonać instrukcje skoku warunkowego i podobne. 
 
Patrz też :  FCOMP ,  FCOMPP  
 FCOM ,  FCOMIP ,
Kategoria:  
 Instrukcje koprocesora 
 Instrukcje specyficzne dla Pentium/Pentium Pro/Pentium II
 FCOMIP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fcomip fpureg 
 fcomip fpureg,ST0
 
Opis : Porównuje dwie  liczby rzeczywiste : na wierzcholku st0 z podanym 
operandem, a jesli nie jest on podany, z st1. Efekt jest zapisywany do 
rejestru  EFLAGS  procesora i bezpośrednio po nim
można więc wykonać instrukcje skoku warunkowego i podobne. 
Po zakończeniu obniża wierzchołek stosu zmiennoprzecinkowego.
 
Patrz też :  FCOMP ,  FCOMPP , 
 FCOMI ,  FCOM  
Kategoria:  
 Instrukcje koprocesora 
 Instrukcje specyficzne dla Pentium/Pentium Pro/Pentium II
 FCOMP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fcomp mem32/64 
 fcomp fpureg
 fcomp fpureg,ST0
 
Opis : Porównuje dwie  liczby rzeczywiste : na wierzcholku st0 z podanym 
operandem, a jesli nie jest on podany, z st1. Bity C0 i C3 w 
slowie statusU koprocesora  przyjmują następujące wartości: 
 -  C0=0 i C3 =0 gdy ST0 > operand 
 C0 =1 C3 -0 gdy ST0 < operand
 C0=0 i C3=1 gdy ST0 == operand
 C0=1 i C3 =1 gdy St0 != operand (czyli, jak się domyślam, gdy zachodzi
sytuacja nieporównywalności oprandu i st0 np. dwie nieskończoności).
Po zakończeniu obniża wierzchołek stosu zmiennoprzecinkowego.
 
Patrz też :  FCOM ,  FCOMPP , 
 FCOMI ,  FCOMIP  
Kategoria:  
 Instrukcje koprocesora
 FCOMPP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fcompp 
 
Opis : Porównuje dwie  liczby rzeczywiste : na wierzcholku st0 z podanym 
operandem, a jesli nie jest on podany, z st1. Bity C0 i C3 w 
slowie kontrolnym koprocesora  przyjmują następujące wartości: 
 -  C0=0 i C3 =0 gdy ST0 > operand 
 C0 =1 C3 -0 gdy ST0 < operand
 C0=0 i C3=1 gdy ST0 == operand
 C0=1 i C3 =1 gdy St0 != operand (czyli, jak się domyślam, gdy zachodzi
sytuacja nieporównywalności oprandu i st0 np. dwie nieskończoności)
Po zakończeniu obniża wierzchołek stosu zmiennoprzecinkowego dwa razy .
 
Patrz też :  FCOMP ,  FCOMPP , 
 FCOMI ,  FCOMIP  
Kategoria:  
 Instrukcje koprocesora
 FCOS  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fcos 
 
Opis : Oblicza cosinus kata, ktorego wartosc w radianach jest przechowywana
w st0 i wynik rowniez przechowuje w st0.
 
Patrz też : 
 FSIN ,
 FSINCOS 
 
Kategoria:  
 Instrukcje koprocesora
 FDECSTP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fdecstp 
 
Opis : Powoduje "rotację" stosu. tzn. st7 przesuwa się na st0, st0 na st1 itd.
Obniża wartość stosu. 
 
Patrz też :  FINCSTP 
 
Kategoria:  
 Instrukcje koprocesora
 FDISI  
  Dostępna: od 386 do 486 
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fdisi 
 
Opis :  
Powoduje że znacznik IM w  słowie kontrolnym koprocesora 
przyjmuje wartość jeden. (WYłączenie zezwolenia na przerwania). Jak się wydaje,
traktowana jest przez nowsze procesory jako równoważnik instrukcji fnop.
 
Patrz też : 
 FENI ,  CLI 
 FNDISI 
Kategoria:  
 Instrukcje przerwań  
 Instrukcje koprocesora
 FDIV  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fdiv mem32/64 
 fdiv fpureg
 fdiv st0,fpureg
 
Opis :  Dzieli stos przez operand i wynik składuje na stosie (zmiennoprzecinkowym),
za wyjątkiem fdiv st0,fpureg, gdzie operand dzieli przez stos i wynik zostawia
w operandzie.
 
Patrz też :  DIV ,  FDIVRP ,
 FDIVR  ,  FDIVP ,
  FIDIV  
 
 
Kategoria:  
 Instrukcje koprocesora
 FDIVP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fdivp mem32/64 
 fdivp fpureg
 fdivp st0,fpureg
 
Opis :  Dzieli stos przez operand i wynik składuje na stosie (zmiennoprzecinkowym),
za wyjątkiem fdiv st0,fpureg, gdzie operand dzieli przez stos i wynik zostawia
w operandzie. Po zakonczeniu operacji obniza stos zmiennoprzecinkowy.
 
Patrz też :  DIV ,  FDIVRP ,
 FDIVR   ,  FDIV ,
 FIDIVP  
  
Kategoria:  
 Instrukcje koprocesora
 FDIVR  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fdivr mem32/64 
 fdivr fpureg
 fdivr st0,fpureg
 
Opis :  Dzieli operand przez stos i wynik składuje na stosie (zmiennoprzecinkowym),
za wyjątkiem fdiv st0,fpureg, gdzie stos dzieli przez operand i wynik zostawia
w operandzie.
 
Patrz też :  DIV ,  FDIVRP ,
 FDIVP  ,  FDIV ,
 FIDIVR  
 
 
Kategoria:  
 Instrukcje koprocesora
 FDIVRP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fdivrp mem32/64 
 fdivrp fpureg
 fdivrp st0,fpureg
 
Opis :  Dzieli operand przez stos i wynik składuje na stosie (zmiennoprzecinkowym),
za wyjątkiem fdiv st0,fpureg, gdzie stos dzieli przez operand i wynik zostawia
w operandzie. Po zakonczeniu zmniejsza stos zmiennoprzecinkowy.
 
Patrz też :  DIV ,  FDIVP ,
 FDIVR  ,  FDIV 
 
 
Kategoria:  
 Instrukcje koprocesora
 FENI ,FNENI 
  Dostępna: od 386 do 486 
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
feni 
 
Opis :  
Powoduje że znacznik IM w  słowie kontrolnym koprocesora 
przyjmuje wartość zero. (Włączenie zezwolenia na przerwania). FNENI robi to
samo bez czekania aż koprocesor skończy bieżącą operację.
 
Patrz też : 
 FDISI ,  CLI 
Kategoria:  
 Instrukcje przerwań  
 Instrukcje koprocesora
 FFREE  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
ffree stn, gdzie n 0-7
 
Opis :  Powoduje zmianę zawartości słowa TAGn na 11, co oznacza że rejestr STn
jest bez zawartości (pusty) bez faktycznego usunięcia zawartości tego rejestru.
 
Patrz też :  FSAVE 
 
 
Kategoria:  
 Instrukcje koprocesora
 FIADD  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fiadd mem16 
 fiadd mem32
 
Opis :  
Dodaje operand do wierzchołku stosu i zapamiętuje wynik na wierzchołku stosu. 
Operand traktowany jest jako liczba całkowita.
 
Patrz też :  ADD , FADD ,
 FISUB 
 
 
Kategoria:  
 Instrukcje przerwań 
 Instrukcje koprocesora
 FICOM  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
ficom mem16/32 
 
Opis : Porównuje wierzcholek stosu z podanym operandem traktowanym jako liczba
całkowitai. Bity C0 i C3 w 
slowie kontrolnym koprocesora  przyjmują następujące wartości: 
 -  C0=0 i C3 =0 gdy ST0 > operand 
 C0 =1 C3 -0 gdy ST0 < operand
 C0=0 i C3=1 gdy ST0 == operand
 C0=1 i C3 =1 gdy St0 != operand (czyli, jak się domyślam, gdy zachodzi
sytuacja nieporównywalności oprandu i st0 np. dwie nieskończoności)
 
Patrz też :  FCOMP ,  FCOMPP , 
 FCOMI ,  FCOMIP  ,
 FICOMP ,  CMP 
Kategoria:  
 Instrukcje koprocesora
 FICOMP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
ficomp mem16/32 
 
Opis : Porównuje wierzcholek stosu z podanym operandem traktowanym jako liczba
całkowitai. Bity C0 i C3 w 
slowie kontrolnym koprocesora   przyjmują następujące wartości: 
-  C0=0 i C3 =0 gdy ST0 > operand 
 C0 =1 C3 -0 gdy ST0 < operand
 C0=0 i C3=1 gdy ST0 == operand
 C0=1 i C3 =1 gdy St0 != operand (czyli, jak się domyślam, gdy zachodzi
sytuacja nieporównywalności oprandu i st0 np. dwie nieskończoności)
Po zakończeniu operacji obniża wierzchołek stosu.
 
Patrz też :  FCOMP ,  FCOMPP , 
 FCOMI ,  FCOMIP  ,
 FICOM  
Kategoria:  
 Instrukcje koprocesora
 FIDIV  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fidiv mem32/16 
 
Opis :  Dzieli stos przez operand i wynik składuje na stosie (zmiennoprzecinkowym),
Operand traktorując jako liczbę całkowitą
 
Patrz też :  DIV ,  FDIVRP ,
 FDIVR  ,  FDIVP ,
  FDIV ,  FIDIVR  
 
 
Kategoria:  
 Instrukcje operujące na liczbach całkowitych  
 Instrukcje koprocesora
 FIDIVR  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fidivr mem32/16 
 
Opis :  Dzieli  operand przez stos zmiennoprzecinkowy i wynik składuje na 
stosie (zmiennoprzecinkowym).
 
Patrz też :  DIV ,  FDIVRP ,
 FDIVR  ,  FDIVP ,
  FDIV ,  FIDIV  
 
 
Kategoria:  
 Instrukcje operujące na liczbach całkowitych  
 Instrukcje koprocesora
 FILD  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fild mem16/32/64
 
Opis :  
Ładuje liczbę całkowitą z wskazanego miejsca pamięci , przekształca
ją na rzeczywistą i wstawia na wierzchołek stosu zmiennoprzecinkowego.
 
Patrz też :  FIST 
 
 
Kategoria:  
 Instrukcje koprocesora
 FIMUL  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fimul mem16/32
 
Opis :  Mnoży wierzchołek stosu zmiennoprzecinkowego przez podany operand
traktowany jako liczba całkowita i wynik zachowuje na wierzchołku stosu.
(w rejestrze st0).
 
Patrz też :  IMUL ,
 FMUL  
 
 
Kategoria:  
 Intrukcje operujące na liczbach całkowitych , 
 Instrukcje koprocesora
 FINCSTP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fincstp 
 
Opis : Wskaźnik stosu zmiennoprzecinkowego zwiększa się o jeden.
 
Patrz też : 
 FDECSTP  
 
 
Kategoria:  
 Instrukcje koprocesora
 FINIT  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
finit
 
Opis :  Powoduje zainicjowanie pracy koprocesora. Zaznacza wszystkie rejestry
koprocesora jako puste, mimo że nie zmienia ich zawartości (ustawia stan na 3 - 11 binarnie), 
 słowo kontrolne  koprocesora przyjmuje wartość
037F,  słowo stanu  przyjmuje wartość zero. Wyslanie tej instrukcji powoduje wykonanie kolejno dwóch  FWAIT  i  FNINIT . Powoduje to efektywnie wykonanie i odczekanie na zakonczenie przerwan dotyczacych FPU (FWAIT) a nastepnie inicjalizacja kolejki rozkazow i danych, tak zeby byly gotowe do pracy (FNINIT)
 
Patrz też : 
 FNINIT 
 FWAIT  
 
 
Kategoria:  
 Instrukcje koprocesora
 FIST  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fist mem16/32/64
 
Opis :  
Łachowuje liczbę całkowitą z szczytu wierzchołka stosu do podanego
miejsca w pamięci. Liczba rzeczywista z szytu stosu zmiennoprzecinkowego
zaokrąglana jest zgodnie z zawartością pola RC w 
słowie kontrolnym  koprocesora. Liczba rzeczywista pozostaje na stosie i 
wskaźnik stosu nie ulega zmianie.
 
Patrz też :  FILD ,  FISTP  
 
 
Kategoria:  
 Instrukcje koprocesora
 FISTP  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fist mem16/32/64
 
Opis :  
Łachowuje liczbę całkowitą z szczytu wierzchołka stosu do podanego
miejsca w pamięci. Liczba rzeczywista z szytu stosu zmiennoprzecinkowego
zaokrąglana jest zgodnie z zawartością pola RC w 
słowie kontrolnym  koprocesora. Następnie obniża wskażnik stosu (czyli
postępuje tak jakby wartość została z stosu zdjęta).
 
Patrz też :  FILD ,  FIST  
 
 
Kategoria:  
 Instrukcje koprocesora
 FISUB, FISUBR  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: -  
fisub mem16/32
 
Opis :  Instrukcja powoduje odjęcie podanego operandu od zawartości
weirzchołka stosu zmiennoprzecinkowego. Wynik umieszczany jest na wierzchołku
stosu. Instrukcja FISUBR jest identyczna, z tym że odejmuje zawartość stosu
%st0 od podanego operandu i wynik zostawia w %st0.
 
Patrz też :  SUB ,
 FADD  
 
 
Kategoria:  
 Intrukcje operujące na liczbach całkowitych , 
 Instrukcje koprocesora
 FLD  
  Dostępna: od 386  
  Liczba Mikrokodów: ? 
 
  komenda niesprawdzona  
Składnia: