IMUL - celočíselné násobení
Verze z 9. 11. 2012, 22:35, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky)
- 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
- 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