DIV - delení bez uvažování znaménka (unsigned division)

Z Delphi & Pascal (česká wiki)
Verze z 9. 11. 2012, 17:24, 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
DIV - delení bez uvažování znaménka (unsigned division)
Časování
14-25 (80286), 14-41 (80386)
Popis
Instrukce DIV provádí delení operandu. Je-li specifikován zdrojový operand o velikosti byte, je registr AX dělen tímto bytovým operandem a výsledek je uchován v AL (kvocient) a v AH (zbytek). Je-li specifikován zdrojový operand o velikosti slova, je delen DX:AX slovem. Nejvýznamnejších 16 bitu zdrojového delence je uloženo v DX, kvocient v AX a zbytek v DX.


Syntaxe
DIV 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 nule nebo je výsledek delení – kvocient - příliš velký a nevejde se do místa určení (AL nebo AX), je generováno přerušení INT 0. Jestliže obsahují DS, CS či ES neplatné efektívní adresy operandů, 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 příliš velký a nevejde se do místa určení (AL nebo AX), je generováno přerušení INT 0. Jestlize je slovní operand na offsetu OFFFFH, je generováno přerušení INT 13. Dělení ve dvojité přesnosti je možné se 64-bitovým dělencem v EDX:EAX, 32-bitový dělitel je v paměti nebo v registru, 32-bitový kvocient v EAX a 32-bitový zbytek je v EDX.


Příklad

Dělení bytu jiným bytem:

 MOV  AL, NUMER_BTE
 DIV  DIVSR_BTE         ;Kvocient v AL, zbytek v AH

Dělení slova bytem:

 MOV  AX, NUMER_WRD
 DIV  DIVSR_BTE          ;Kvocient v AL, zbytek v AH

Dělení dvouslova slovem:

 MOV  DX, NUMER_MSW
 MOV  AX, NUMER_LSW
 DIV  DIVSR_WRD          ;Kvocient v AX,zbytek v DX

Dělení u 80386:

 MOV  EDX, MSB_NUMBER
 MOV  EAX, LSB_NUMBER
 DIV  ECX                ;Kvocient v EAX, zbytek v EDX