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



Логические операции - часть 5


    выделения битов эти команды используют маску. Значение маски
    используется командой побитно. Чтобы установить какой=либо один
    бит, нужно использовать команду OR. В этом случае все значения
    маски - нули, кроме единицы на месте устанавливаемого бита. Команда
    OR над маской и другим операндом устанавливает 1 в выбранном бите,
    а другие биты результата оставляют неизменными. Аналогично,
    оператор AND может сбросить единственный бит. В маске все разряды
    единичные, кроме сбрасываемого бита. Этот бит сбросится в 0, а
    остальные останутся без изменений.
 
      Программисты не используют функцию исключающее или столь же
    часто, как команды AND и OR, но она тоже бывает полезна. Команда
    может выполнить взаимное дополнение одного бита с данными. Запишите
    маску для команды XOR так, чтобы на месте инвертируемого бита была
    1, а на всех других местах 0. Когда команда XOR выполнится, биты,
    соответствовавшие нулям, останутся без изменений, а биты,
    соответствовавшие единицам маски, инвертируются. Если начальное
    значение бита было 0, 1 XOR 0 дает 1, дополнение к 0, а если
    начальное значение было 1, 1 XOR 1 дает 0, дополнение к 1.
 
      Последняя логическая команда - TEST (проверка). Эта команда
    идентична команде AND, за исключением того, что она не записывает
    результат, но устанавливает флаги в соответствии с ним, т.е.
    команда TEST соответствует команде AND, как команда CMP
    соответствует команде SUB. Эта команда проверяет заданный бит, или
    набор битов внутри байта или слова.
 
      Как работает команда проверки? Предположим, программа хочет
    проверить младший значащий бит байта, бит 0. Программа порождает
    маску 01H либо в регистре, либо как непосредственное значение.
    Команда TEST (или AND) дает результат с гарантированными нулями по
    всем позициям, за исключением бита 0; значение бита 0 отражает
    значение оригинала. Если нулевой бит оригинала содержит 0, то бит
    остается нулевым. Если он сначала единичен, результат ненулевой, и
    флаг нуля сбрасывается; если же бит 0, результат нулевой, и флаг
    нуля устанавливается. Таким образом, программа может проверить
    единственный бит, выполняя команды TEST и AND с маской, которая
    имеет единственную единицу на месте проверяемого бита; регистр
    флагов отразит состояние этого единственного бита. Команда TEST
    проверяет заданный бит без разрушения других битов, поскольку эта
    команда не изменяет поле результата.



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