IDIV - celočíselné delení (se znaménkem)

From Delphi & Pascal (česká wiki)
Jump to navigation Jump to search
Instrukce
IDIV - celočíselné delení (se znaménkem)
Časování
17-28 (80286), 19-34 (80386)
Popis
Instrukce IDIV provádí operaci celočíselného delení se znaménkem. Jestlize je specifikován zdrojový operand o velikosti byte, je registr AX delen bytovým operandem: kvocient je uložen v AL a zbytek v AH. Zdrojový operand o velikosti slova deli DX:AX slovem. Vyšších 16 bitů delence je v registru DX, kvocient je umísten v AX a zbytek v DX. Zbytek má stéjne znaménko jako delenec a je vždy menší jako delitel. Viz též poznámka pro 80386.


Syntaxe
IDIV source


Ovlivňuje příznaky
žádné


Nedefinované příznaky
SF, AF, OF, PF, CF


Výjimky v privilegovaném módu
Je-li delitel roven 0 nebo je-li zbytek príliš velký pro umístení do požadovaného registru (AX nebo AL), je generováno přerušení INT 0. Jestlize obsahuji DS, CS či ES neplatné efektivní adresy operandu, je generována všeobecná výjimka privilegovaného módu. Jestliže SS obsahuje neplatnou adresu, je generována výjimka "chyba zásobniku".


Výjimky v reálnem módu
Je-li delitel 0 nebo je kvocient príliš velký a nevejde se do místa určení (AL nebo AX), je generováno přerušení INT 0. Jestliže je slovní operand na offsetu OFFFFH, je generováno přerušení INT 13.


Poznámka pro 80386
Velikost slova je 32 bitu. Delení ve dvojité přesnosti je prováděno s delitelem v registrovém páru EDX:EAX. Delitel je 32-bitová hodnota umístěna v registru/pameti. 32-bitový podíl (kvocient) je v EAX a 32-bitový zbytek v EDX.


Příklad

Delení slova bytem:

 MOV AX, NUMER_WRD
 IDIV DIVSR_BTE


Delení slova slovem:

 MOV  AX, NUMER_WORD
 CWD                 ;Konverze slova na dvouslovo
 IDIV DIVSR_WRD


Delení dvouslova slovem:

 MOV  DX, NUMER_MSW
 MOV  AX, NUMER_LSW
 IDIV DIVSR_WRD


Delení u 80386:

 MOV  EDX, MSB_NUMBER
 MOV  EAX, LSB_NUMBER
 IDIV DIVISOR