CMP - porovnej dva operandy

Z Delphi & Pascal (česká wiki)
Verze z 4. 11. 2012, 23:01, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky) (Vytvorená stránka „;Instrukce : CMP - porovnej dva operandy ;Časování : 2-7 (80286), 2-6 (80386) ;Popis : Instrukce CMP odečte zdrojový operand od cílového a podle vzniklého ...“)
(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
CMP - porovnej dva operandy
Časování
2-7 (80286), 2-6 (80386)
Popis
Instrukce CMP odečte zdrojový operand od cílového a podle vzniklého výsledku nastaví patričné příznaky. CMP nemení operandy. Zdrojový a cílový operand musí být oba stejného typu, s výjimkou použití CMP v bezprostredním režimu - zde může být bezprostrední operand o velikosti byte s rozšíreným znaménkovým bitem na celé slovo porovnán se slovem v paměti.


Syntaxe
CMP destination,source


Ovlivňuje příznaky
OF, SF, ZF, AF, PF, CF


Nedefinované příznaky
žádné


Výjimky v privilegovaném módu
Jestliže registr CS, DS nebo ES obsahují nepovolenou efektívni adresu 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 slovní operand umísten na offsetu 0FFFFH, je generováno přerušení INT 13.


Poznámka pro 80386
šírka slova je 32 bitů


Příklad

Bezprostrední operand srovnán s paměti:

 CMP EXTMEM, 5CAFH

Bezprostrední operand srovnán s registrem:

 CMP BL,5
 CMP EAX, 0FFFF0000H (pro 80386)

Bezprostrední operand srovnán se stradačem:

 CMP AL, 7

Registr srovnán s registrem:

 CMP AX, BX
 CMP EDX, EAX (jen pro 80386)

Registr srovnán s paměti:

 CMP EXTMEM, DX

Paměť srovnána s registrem:

 CMP CH, EXTMEM
 CMP EBX, VALUE (jen pro 80386)