CMPS - porovnej řetezcové operandy
Verze z 9. 11. 2012, 16:57, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky) (1 revízia: Assembler)
- 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)
- 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