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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

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






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





Все логические команды рассматривают свои операнды как упорядоченные наборы битовых значений. В таком наборе может содержаться 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]







Date: 2015-10-18; view: 338; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию