Diviziune (div, idiv)

Mnemonica din DIV. IDIV scrie comenzi către procesor, denotând, respectiv, divizarea și divizarea nesemnată a numerelor cu un semn.

Divizor divizor IDIV divizor







unde divizorul este un registru de 8, 16, 32 de biți sau o variabilă de 8, 16, 32 de biți.

Locația divizorului în DIV. IDIV nu este specificat, este definit rigid și depinde de dimensiune (octet, cuvânt, cuvânt dublu) al divizorului. Din acest motiv, divizorul nu poate fi un număr dat explicit (în comandă), deoarece numărul explicit specificat nu are nicio dimensiune.

Divizibilul trebuie plasat:
în AX - dacă divizorul are dimensiunea unui octet, atunci după divizare coeficientul este găsit în registrul AL. restul divizării se află în registrul AH;
în DX: AX - dacă divizorul are dimensiunea cuvântului (2 octeți), atunci după divizare găsim coeficientul în registrul AX. restul diviziei se află în registrul DX;
în EDX: EAX - dacă divizorul are dimensiunea unui cuvânt dublu (4 octeți), atunci după împărțirea coeficientului pe care îl găsim în registrul EAX. restul diviziunii este în registrul EDX.

Atunci când se împarte într-un cuvânt sau un cuvânt dublu, dividendul trebuie să fie "programat" în două registre. Intrare DX: AX reprezintă un dividend sub forma unui cuvânt dublu, cei doi octeți cei mai înalți fiind plasați în DX. cei doi cei mai puțin semnificativi octeți sunt în AX. Înregistrare EDX: EAX înseamnă un divizibil cu patru cuvinte (8 octeți), cu patru octeți de înaltă ordonare plasați în EDX. cei patru cei mai puțin semnificativi octeți sunt în EAX.







În diviziunea nesemnată, dacă divizorul nu are cifre în partea care trebuie plasată în DX sau EDX. registrul DX sau EDX pur și simplu zero. În diviziunea semnelor, se folosesc comenzile cbw. CWD. CDQ. când toți biții de ordin înalt sunt umpluți cu zerouri - pentru numere pozitive sau pentru numere negative. Comanda cbw convertește simbolic (extinde) conținutul registrului AL în AX. comanda cwd convertește AX în DX: AX. comanda cwde convertește AX în EAX. comanda cdq convertește EAX la EDX: EAX.

In caz de exces (depășire) obținut prin împărțirea mărimii registrului în care rezultatul este să fie plasat, o execuție ulterioară program este întrerupt de către sistemul de operare. Atunci când diviziunea nesemnate pe un anumit octet maxim este de 255, atunci când împărțit la cuvânt - 65535. Din cauza numărului mic și intervalul de rezultatul procesat, divizia de octet sau cuvânt, ca operațiunea susținută de procesoare Intel moderne, este stabilit în principal pentru compatibilitate cu versiuni anterioare de procesoare și programe corespunzătoare (învechite). Cu toate acestea, dimensiunea mai mică a divizorului, cu atât mai repede comanda, și diviziunea în cuvântul octet poate acum (în condiții adecvate) pentru a face algoritmi de a favoriza un volum mare de calcule și executarea timp critic. Deci, pentru 386-procesor desfășoară diviziune pe un cuvânt dublu necesită 38 de cicluri de ceas pe podea - 22 de cicluri pentru octetul - 14 cicluri.

Exemplele sunt prezentate mai jos. Despre funcțiile PrintLine. PrintText. PrintDec vedeți VKDEBUG







Articole similare

Trimiteți-le prietenilor: