SCAS/SCASB/SCASW - porovnání řetezcových dat

Z Delphi & Pascal (česká wiki)
Verze z 18. 1. 2013, 16:08, kterou vytvořil Zdeno Sekerák (diskuse | příspěvky) (1 revízia: Assembler pismeno S-T)
(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
SCAS/SCASB/SCASW - porovnání řetezcových dat
Časování
7
Popis
Srovnává byte (AL), slovo(AX) s ES:DI nebo s ES:EDI. Instrukce SCAS odečíta paměťový byte nebo slovní operand adresovaný ES:DI (ES:EDI) buď od registru AL nebo AX. Výsledek je ignorován a jsou nastavovány jen příslušné příznaky. Operand v paměti musí být adresován registrem ES. Po srovnání je DI (EDI) inkrementován při DF=0 jinak je DI (EDI) dekrementován. Inkrement/dekrement je 1 pro bytový a 2 pro slovní operand.


Syntaxe
SCAS destination, source
SCASB (žádné operandy)
SCASW (žádné operandy)


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


Nedefinované příznaky
žádné


Výjimky v privilegovaném módu
Jestliže registry CS, DS nebo ES obsahují neplatné efektivní adresy operandu je generována všeobecná výjimka porušení ochrany paměti. Jestliže SS obsahuje neplatnou adresu je generována výjimka "chyba zásobníku".


Výjimky v reálnem módu
Jestliže je slovní operand na offsetu 0FFFFH je generováno přerušení INT 13.


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


Příklad
MOV CL, 10H      ; srovnání 16 byte
LEA DI, VALUE1   ; umístění retezce
MOV AL, 'S'      ; hledany znak
REPNE SCASB      ; dokud není nalezen, prohlížej další byty