CMPS - porovnej řetezcové operandy

Z Delphi & Pascal (česká wiki)
Skočit na navigaci Skočit na vyhledávání
Instrukce
CMPS/CMPSB/CMPSW - porovnej řetezcové operandy
Časování
8 (80286), 10 (80386)
Popis
Instrukce CMPS/CMPSB/CMPSW srovnáva obsah paměťového místa adresovaného registrem SI(ESI) s obsahem paměťového místa adresovaného registrem DI(EDI). Instrukce CMPS odečte obsah paměťového místa adresovaného registrem DI(EDI) od paměťového místa adresovaného registrem SI(ESI). Výsledkem je nastavení příznaku, avšak obsah paměťových míst není meněn. Registry SI(ESI) a DI(EDI) jsou inkrementovaný nebo dekrementovány podle hodnoty príznaku DF. Je-li príznak DF nulován (0), jsou SI(ESI) a DI(EDI) inkremetovány, pri hodnote DF = 1 jsou tyto registry dekrementovány. Lze specifikovat bytově nebo slovní porovnávaní. Inkrementace indexových registrů SI(ESI) a DI(EDI) je o 1 pro bytové operandy a o 2 pro operandy slovní.


Poznámka

Pravý operand instrukce CMPS je operand indexovaný registrem DI a tento operand je adresován registrem ES. Táto implicitní specifikace nemůže byt změnena.


Syntaxe
CMPS source_string, destination_string
CMPSB (žádné operandy)
CMPSW (žádné operandy)


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


Nedefinované příznaky
žádné


Výjimky v privilegovaném módu
Jestliže registr CS, DS nebo ES obsahují nepovolenou efektívní 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 operandu je 32 bitů. Použijte instrukci CDQ.


Příklad
 MOV SI,OFFSET STRING1
 MOV DI,OFFSET STRING2
 CMPS STRING1,STRING2
 CMPS DS:BYTE PTR[SI],ES:[DI]
 LEA ESI,STRING1 (jen pro 80386)
 LEA EDI,STRING2
 CMPS STRING1,STRING2