Assembler для начинающих



Команды сканирования и сравнения


    Две оставшиеся строковые команды используются в программах для
    сравнения строковой информации.  Первая из них - команда,
    сканирование строки SCAS.  Эта команда сравнивает значение в
    регистре AL или регистре AX с операндом в памяти, на который
    ссылается пара регистров ES:DI.  Команда SCAS устанавливает флаги
    нуля, переноса и переполнения, показывая результат сравнения
    аккумулятора и ячейки памяти, и изменяет регистр DI так, чтобы он
    указывал на следующий операнд в строке.
 
      Команда SCAS не может использовать обычный префикс REP для
    сканирования длинной строки информации. Точно так же, как команда
    REP LODS не имеет смысла, команда REP SCAS не позволяет программе
    контролировать каждое сравнение. Вместо этого существует два
    варианта префикса REP - "повторять пока равно" REPE и "повторять
    пока не равно" REPNE. Как и в случае обычного префикса REP,
    программа загружает в регистр CX длину строки. Если указан префикс
    REPE, команда выполняется ло тех пор, пока содержимое регистра AL
    (или AX) не перестанет совпадать с ячейками памяти, или пока
    содержимое регистра CX не станет равно 0. Пока аккумулятор
    совпадает с ячейкой памяти, сканирование продолжается. Команда
    REPNE в точности противоположна команде REPE. Сканирование
    продолжается до тех пор, пока аккумулятор не совпадает с ячейкой
    памяти.
 
      Комбинация команд SCAS и REPNE позволяет программе выполнять
    быстрый поиск по таблице. Чтобы найти объект в таблице, программа
    должна перебрать каждую ячейку для сравнения с аргументом. На
   Фиг. 4.24 показано, как команда SCAS выполняет эту функцию. В
    регистре AL содержится аргумент сравнения. Таблица SCAN_TABLE
    содержит значения, среди которых ведется поиск, а в регистре CX
    находится длина таблицы. Команда REPNE SCASB сканирует таблицу до
    тех пор, пока содержимое аккумулятора не станет равно элементу
    строки. В этом месте регистр DI указывает на байт таблицы,



Содержание  Назад  Вперед