Информатика. Курс лекций. Громов Ю.Ю - 41 стр.

UptoLike

Если операция AND может использоваться для дублирования части битовой строки с помещением нулей во все биты
другой ее части, то операция OR может применяться для дублирования части строки с помещением во все ее оставшиеся
биты единиц. Для этого также используется определенная маска, но на этот раз те позиции, значения которых должны быть
продублированы, отмечаются в ней нулями, а единицами заполняются все остальные позиции, не подлежащие дублирова-
нию. Приведем пример. При выполнении операции OR с любым байтом и битовой комбинацией 11110000 будет получен
результат, в котором четыре старших бита всегда будут содержать единицы, тогда как младшие биты будут просто копиями
битов исходного операнда, что демонстрируется следующим примером.
11111010
10101010
11110000
OR
Таким образом, если операция AND с маской 11011111 может использоваться для того, чтобы поместить значение 0 в
третий со старшего конца бит некоторого восьмиразрядного битового отображения, то операция OR с маской 00100000 мо-
жет применяться для установки этого же бита в единицу.
Операция XOR чаще всего используется для создания строки дополнения к некоторой строке битов. Например, обрати-
те внимание на взаимосвязь между вторым операндом и строкой результата.
01010101
10101010
11110000
XOR
Операция XOR между любым байтом и байтом, содержащим все 1, дает в результате байт дополнения к исходному байту.
Операции сдвига. Операции сдвига и вращения (циклического сдвига) позволяют перемещать биты в регистре и часто
используются для решения проблем выравнивания, например при подготовке значения байта к последующим операциям
маскирования или манипулирования значением мантиссы в представлениях с плавающей точкой. Классификация этих опе-
раций производится по направлению движения (вправо или влево), а также с учетом того, является сдвиг циклическим или
нет. В рамках этой классификации существует множество различных вариантов, для обозначения которых используется
смешанная терминология. Давайте бегло ознакомимся с основными принципами, положенными в ее основу.
Возьмем для примера некоторый байт и сдвинем его содержимое на один бит вправо или влево. На том конце байта, в
направлении которого происходит сдвиг, крайний бит выйдет за его пределы и будет потерян, на другом конце образуется
пустое место, в которое потребуется ввести некоторое значение. То, что произойдет с удаляемым битом и что будет вставле-
но в освободившуюся позициюименно это и определяет отличия между множеством разнообразных операций сдвига. Од-
ним из возможных решений является помещение бита, удаляемого с одного конца байта, в пустую позицию на другом его
конце. В результате мы получим циклический сдвиг, который также иногда называют вращением. Если выполнить цикличе-
ский сдвиг байта вправо восемь раз подряд, то получим ту же битовую комбинацию, которая существовала вначале, тогда
как семь циклических сдвигов вправо идентичны одному циклическому сдвигу влево.
Другим вариантом решения является удаление бита, выходящего за пределы байта, и помещение в освобождающиеся
позиции исключительно значения 0. Подобный вариант называют логическим сдвигом (logical shift). Этот вариант сдвига
влево можно использовать для умножения значения байта в дополнительном двоичном коде на число 2. В любом случае
сдвиг двоичных цифр влево означает умножение значения на 2, подобно тому как и аналогичный сдвиг десятичных цифр
означает умножение на десять. Кроме того, сдвинув двоичную строку вправо, можно выполнить деление ее значения на два.
Однако в этом случае нужно обязательно сохранить тот знаковый бит, который используется в данной нотации. Для этого
часто используется такой вариант сдвига вправо, при котором освобождающаяся позиция (а это, чаще всего, и будет знако-
вый бит) всегда заполняется тем значением, которое в ней находилось до операции сдвига. Сдвиги, которые не изменяют
значения знакового бита, иногда называют арифметическими (arithmetic shift).
Арифметические операции. Несмотря на то что выше уже шла речь об арифметических операциях сложения, вычита-
ния, умножения и деления, все же необходимо сделать ряд замечаний. Как уже говорилось, все операции этой группы чаще
всего могут быть реализованы с помощью единственной операции сложения и действия отрицания. Поэтому некоторые ма-
логабаритные компьютеры содержат в своем наборе команд только операции сложения или сложения и вычитания.
Кроме того, следует напомнить, что существует множество различных вариантов любой арифметической операции.
Речь об этом уже шла выше в связи с операциями сложения, которые включены в набор команд гипотетической машины,
описанной в приложении В. При операциях сложения операнды могут быть представлены в двоичном дополнительном коде,
и тогда операция их сложения будет выполняться как обычное двоичное суммирование. Если же операнды будут представ-
лены как числа в формате с плавающей точкой, то при суммировании потребуется выделить мантиссу каждого из чисел. По-
сле этого эти значения должны быть сдвинуты вправо или влево в зависимости от значения в поле порядка. Затем проверяют-
ся знаковые биты и выполняется операция сложения. Полученный результат вновь переводится в формат с плавающей точкой.
Как видите, хотя обе описанные выше операции считаются операциями сложения, действия машины по их выполнению будут
существенно отличаться. Более того, с точки зрения самой машины, между этими двумя операциями вообще нет никакой связи.
Вопросы для самопроверки
1. Выполните приведенные ниже операции:
а) AND
101001011
010011011
; б) AND
11101100
10000011
; в) AND
00101101
11111111
;
г) OR
101001011
010011011
; д) OR
11101100
10000011
; е) OR
00101101
11111111
;