Přidáno 2 498 bajtů,
9. 11. 2012, 22:35 ;Instrukce
: IMUL - celočíselné násobení
;Časování
: 13-24 (80286), 9-41 (80386)
;Popis
: Instrukce IMUL provádí celočíselné násobení se znaménkem. Jestliže je zdrojový operand jediný byte, je vynásoben obsahem registru [[AL]] a 16-bitový výsledek se znaménkem je uložen do [[AX]]. Příznaky [[CF]] a [[OF]] jsou nulovány v případe, že registr [[AH]] je extenzí znaménka hodnoty uložené v [[AL]]; jinak jsou [[OF]] a [[CF]] nastaveny na 1. Viz též poznámku k 80386. Jestliže je zdrojový operand specifikovaný v instrukci IMUL slovo, pak je vynásoben obsahem registru [[AX]] a 32-bitový výsledek se znaménkem je uložen v registrovém páru [[DX]]:[[AX]]. Registr [[DX]] obsahuje vyšších 16 bitu výsledku. Příznaky [[OF]] a [[CF]] jsou nastaveny do nuly v případe, že [[DX]] je extenzí znaménka v [[AX]] (viz poznámku u 80386); jinak jsou [[OF]] a [[CF]] nastaveny do 1. Jestliže instrukce [[IMUL]] specifikuje tri operandy, je druhý operand (jenž je efektívni adresou slovního operandu) násoben tretím operandem (jenž je bezprostrední slovní hodnotou). Výsledek je 16-bitový a je umísten do prvního operandu instrukce [[IMUL]], který specifikuje registr. [[CF]] a [[OF]] jsou nastavený do nuly v případe, že výsledek je číslo se znaménkem v intervalu (-32768,+32768); jinak jsou [[CF]] a [[OF]] nastaveny do 1.
;Syntaxe
: IMUL source
;Ovlivňuje příznaky
: [[OF]], [[CF]]
;Nedefinované příznaky
: [[ZF]], [[SF]], [[AF]], [[PF]]
;Výjimky v privilegovaném módu
: Jestliže registry [[CS]], [[DS]] nebo [[ES]] obsahuji neplatné efektívni adresy operandu, je generována všeobecna výjimka přerušení ochrany paměti. Jestliže [[SS]] obsahuje neplatnou adresu, je generována výjimka "[[chyba zásobniku]]".
;Výjimky v reálnem módu
: Jestliže leží slovní operand na offsetu OFFFFH, je generováno přerušení [[INT 13]].
;Poznámka pro 80386
: Velikost slova je 32 bitu. Je prováděno násobení ve dvojité presnosti a výsledek je uložen v registrovém páru [[EDX]]:[[EAX]]. Tento výsledek vzniká vynásobením 32-bitové hodnoty [[EAX]]-krát.
;Příklad:
MOV AL, NUMBER
IMUL NUMBER ;Výsledek v AX
MOV AX, VALUE1
IMUL VALUE2 ;Výsledek v DX:AX
Pro 80386:
MOV EAX, FCAB1234H
IMUL NUMBER ;Výsledek v EDX:EAX
[[Category:Assembler]]
[[Category:Instrukce mikroprocesoru 80386]]