IMUL - celočíselné násobení

Z Delphi & Pascal (česká wiki)
Verze z 9. 11. 2012, 22:35, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání
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