В учебнике нашла вот такую конструкцию
repne scasb
Это аналогично такой конструкции: МyLoop: cmp al, es:[di] Inc di loop MyLoop Но при этом сохраняются флаги сравнения
Что? Почему такая инструкция существует?
repne - дословно "repeat until not equal" ("повторять, пока значения не будут неравны"), scasb - сравнивает два байта по указателям в SI и DI и устанавливает флаг Z, если они неравны. (упрощённое и неполное объяснение, конечно)
Это называется строковые инструкции и их дофига. Cmps, stos, lods, movs и т.д.
Тут ещё важный момент - не забыть установить флаг направления DF в нужное значение, чаще всего 0, при помощи инструкции cld.
а вот тут поподробнее насчёт флага
Заодно исправлю свою ошибку выше. scasb сравнивает значение регистра AL и значение по адресу в регистре DI. Вот флаг направления решает, уменьшать при каждом повторе инструкции регистр DI на единицу или увеличивать.
Обсуждают сегодня