Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Логические команды.






    Все логические команды рассматривают свои операнды как упорядоченные наборы битовых значений. В таком наборе может содержаться 8 бит или 16 бит, в зависимости от размера операнда.[38] Бит со значением 1 может трактоваться как логическое значение True, а нулевой бит – как логическое значение False.

    Сначала рассмотрим двухадресные логические команды, имеющие такой общий вид

    КОП op1, op2

    Ниже приведены допустимые операнды таких команд:

    op1 op2
    r8 r8, m8, i8
    m8 r8, i8
    r16 r16, m16, i16
    m16 r16, i16

    Как видно, у этих команд допускаются такие же операнды, как и у команд сложения, вычитания и сравнения.

    Будем нумеровать биты в операндах логических команд так же, как и в регистрах, от нуля до некоторого числа N. Число N равно 7 для коротких (байтовых) операндов и равно 15 для длинных (размером в слово):

    N 0
            ...        
                     

    Таким образом, операнды логической команды можно рассматривать как массивы логических элементов, проиндексированных от 0 до N. На языке Паскаль такие массивы можно, например, описать в следующем виде

    Var op1, op2: array [0..N] of Boolean;

    Схему выполнения команды логического умножения

    and op1, op2

    на языке Паскаль можно записать в виде

    for i: =0 to N do op1[i]: =op1[i] and op2[i]

    Схему выполнения команды логического сложения

    or op1, op2

    на языке Паскаль можно записать в виде

    for i: =0 to N do op1[i]: =op1[i] or op2[i]

    Схему выполнения команды неэквивалентности (её часто называют также командой сложения по модулю 2)

    xor op1, op2

    на языке Паскаль можно записать в виде

    for i: =0 to N do op1[i]: =op1[i] < > op2[i]

    Команда логического тестирования

    test op1, op2

    выполняется точно так же, как и команда логического умножения, но без записи результата на место первого операнда, т.е. как и у команды сравнения с кодом cmp её единственным результатом является установка флагов.

    Все перечисленные выше логические команды устанавливают флаги так же, как команда вычитания, например, флаги CF и OF будут разны нулю (никакого переноса и переполнения, конечно, нет), во флаг знака SF переносится левый бит результата и т.д. Но, как мы вскоре увидим, интерес для программиста представляет здесь только флаг нулевого результата ZF, который, как обычно, равен единице (поднят) для полностью нулевого результата, и равен нулю (опущен), если в результате есть хотя бы один ненулевой бит.

    Следует заметить, что мы использовали цикл языка Паскаль только для более строгого описания работы логических команд. Не следует понимать это слишком буквально: на самом деле логические команды на современных ЭВМ выполняют операции над битами своих операндов одновременно (чаще всего за один такт работы центрального процессора), а не в последовательном цикле. [39]






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.