Інструкція SCAS
Інструкція SCAS використовується для перегляду пам’яті та пошуку збігів чи незбігів з конкретним значенням розміром у байт чи слово. Як і всі рядкові інструкції, інструкції SCAS має дві форми – SCASB та SCASW. Інструкція SCASB порівнює зміст регістру AL з байтовим значенням по адресу ES:DI, встановлюючи при цьому флаги, які відображують результат порівняння (як при виконанні інструкції CMP). Як і при виконанні інструкції STOSB, при виконанні інструкції SCASB збільшується чи зменшується значення регістру DI. Рядкові інструкції ніколи не встановлюють флаги таким чином, щоб вони відображали зміни значень регістрів SI, DI і/чи СХ. Інструкції STOS та MOVS взагалі не змінюють ніяких флагів, а інструкції SCAS та CMPS змінюють флаги тільки у відповідності з результатом виконаного їм порівняння. Префікс REPE (який також має назву префікс REPZ) також вказує процесору 8086, що інструкцію SCAS (чи CMPS) треба повторювати доколи регістр СХ не буде дорівнювати нулю, чи допоки не станеться незбіг. Префікс REPE можна розглядати, як префікс, який означає “повторювати, допоки дорівнює”. Аналогічно, префікс REPNE (REPNZ) вказує процесору 8086, що інструкцію SCAS (CMPS) треба повторювати, допоки СХ не буде дорівнювати 0 чи допоки не станеться збіг. Префікс REPNE можна розглядати, як префікс “повторювати допоки не дорівнює”. Як і всі рядкові інструкції, інструкція SCAS збільшує регістр-показчик DI, якщо флаг напрямку дорівнює 0 (очищений за допомогою інструкції STD). Інструкція SCASW – це форма інструкції SCASB для роботи зі словом. Вона зрівнює зміст регістру АХ зі змістом пам’яті по адресі ES:DI та збільшує чи зменшує значення регістру DI у кінці кожного виконання на 2, а ні на 1. Інструкція CMPS Інструкція CMPS дозволяє виконувати зрівняння двох байт чи слів. При одному виконанні інструкції CMPS зрівнюються дві чарунки пам’яті, а потім збільшуються регістри SI та DI. Інструкцію CMPS можна розглядати, як аналог інструкції MOVS, який замість копіювання однієї чарунки пам’яті у іншу зрівнює дві чарунки пам’яті. Інструкція CMPSB порівнює байт по адресі DS:SI з байтом по адресі ES:DI, встановлюючи відповідним чином флаги та збільшуючи чи зменшуючи регістри SI та DI (у відповідності від флагу напрямку). Регістр АХ при цьому не змінюється. Як і всі рядкові інструкції, інструкція CMPS має дві форми (для роботи з байтами та для роботи зі словами), може збільшувати чи зменшувати регістри SI та DI та буде повторюватися при наявності префікса REP.
|