Assembler - язык неограниченных возможностей


Операции над битами и байтами - часть 2


После выполнения команд BTS, BTR и ВТС флаг CF равен значению считанного бита до его изменения в результате действия команды, флаги OF, SF, ZF, AF и PF не определены.

  • Команда:
  • BSF приемник, источник
  • Назначение:
  • Прямой поиск бита
  • Команда:
  • BSR база, смещение
  • Назначение:
  • Обратный поиск бита
  • Процессор:
  • 80386

    BSF сканирует источник (регистр или переменная), начиная с самого младшего бита, и записывает в приемник (регистр) номер первого встретившегося бита, равного 1. Команда BSR сканирует источник, начиная с самого старшего бита, и возвращает номер первого встретившегося ненулевого бита, считая от нуля, то есть, если источник равен 0100 0000 0000 0010b, то BSF возвратит 1 a BSR — 14.

    Если весь источник равен нулю, значение приемника не определено и флаг ZF устанавливается в 1, иначе ZF всегда сбрасывается. Флаги CF, OF, SF, AF и PF не определены.

  • Команда:
  • SETcc приемник
  • Назначение:
  • Установка байта по условию
  • Процессор:
  • 80386

    Это набор команд, которые устанавливают приемник (восьмибитный регистр или переменная размером в один байт) в 1 или 0, если удовлетворяется или не удовлетворяется определенное условие. Условием в каждом случае реально является состояние тех или иных флагов, но, если команда из набора SETcc используется сразу после СМР, условия приобретают формулировки, соответствующие отношениям между операндами СМР (см. табл. 6). Скажем, если операнды СМР были неравны, то команда SETNE, выполненная сразу после этого СМР, установит значение своего операнда в 1.

    Слова «выше» и «ниже» в таблице относятся к сравнению чисел без знака, слова «больше» и «меньше» учитывают знак.


    Таблица 6. Команды SETcc


    Код команды Реальное условие Условие для CMP
    SETA
    SETNBE
    CF = 0 и ZF = 0 если выше
    если не ниже или равно
    SETAE
    SETNB
    SETNC
    CF = 0 если выше или равно
    если не ниже
    если нет переноса
    SETB
    SETNAE
    SETC
    CF = 1 если ниже
    если не выше или равно
    если перенос
    SETBE
    SETNA
    CF = 1 и ZF = 1 если ниже или равно
    если не выше
    SETE
    SETZ
    ZF = 1 если равно
    если ноль
    SETG
    SETNLE
    ZF = 0 и SF = OF если больше
    если не меньше или равно
    SETGE
    SETNL
    SF = OF если больше или равно
    если не меньше
    SETL
    SETNGE
    SF <> OF если меньше
    если не больше или равно
    SETLE
    SETNG
    ZF = 1 и SF <> OF если меньше или равно
    если не больше
    SETNE
    SETNZ
    ZF = 0 если не равно
    если не ноль
    SETNO OF = 0 если нет переполнения
    SETO OF = 1 если есть переполнение
    SETNP
    SETPO
    PF = 0 если нет четности
    если нечетное
    SETP
    SETPE
    PF = 1 если есть четность
    если четное
    SETNS SF = 0 если нет знака
    SETS SF = 1 если есть знак





    Начало  Назад  Вперед