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

UptoLike

F2 30
F3 F8
F4 20
F5 00
F6 30
F7 F9
F8 FF
F9 FF
Если в начале работы машины счетчик адреса содержит значение F0, то какими будут действия машины, если она дой-
дет до команды, записанной в ячейке с адресом F8?
2.4. АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ
Как мы уже говорили ранее, группа арифметических и логических команд состоит из таких команд, которые требуют вы-
полнения некоторых арифметических операций, логических или операций сдвига. В этом разделе мы познакомимся с этими ко-
мандами более подробно.
Логические операции. В первой главе логические операции AND (И), OR (ИЛИ) и XOR (исключающее ИЛИ) были
представлены как операции, которые комбинируют значения двух входных двоичных разрядов в целях получения одного
двоичного разряда на выходе. Эти операции могут быть расширены, т.е. они могут рассматриваться как операции, комбини-
рующие значения двух строк битов для получения одной строки битов на выходе, что достигается посредством применения
соответствующей базовой операции к отдельным позициям в строках. Например, результат применения операции AND к
строкам битов 10011010 и 11001001 будет следующим.
10001000
11001001
10011010
AND
Другими словами, при выполнении этой строковой операции результат операции AND для двух битов в каждой пози-
ции исходных строк просто записывается в этой же позиции строки результата. Аналогичным образом при выполнении опе-
раций OR и XOR с теми же входными строками битов будут получены следующие результаты.
11011011
11001001
10011010
OR
01010011
11001001
10011010
XOR
Операции AND чаще всего используются для помещения нулей в некоторую часть битовой комбинации (не затрагивая
при этом другую ее часть). Например, давайте посмотрим, что произойдет, если байт 00001111 использовать в качестве пер-
вого операнда логической операции AND. Даже не имея никакой информации о втором операнде, можем сразу же сделать
вывод, что четыре старших бита строки результата всегда будут равны 0. Более того, можно также заранее утверждать, что
четыре младших бита строки результата будут копиями соответствующих битов второго операнда, что непосредственно под-
тверждается следующим примером.
00001010
10101010
00001111
AND
Подобное применение операции AND является примером процедуры, называемой маскированием (masking). Первый
операнд, или маска (mask), определяет, какая часть другого операнда подвергается изменению. В случае операции AND ре-
зультатом маскирования будет частичная копия второго операнда, в которой нули заполняют те позиции, которые не подле-
жат дублированию.
Такая операция полезна при работе с битовыми отображениями (bit map), т.е. строкой битов, в которой каждый бит
представляет наличие или отсутствие определенного объекта. Мы уже встречались с битовыми отображениями при изуче-
нии растрового представления изображений, в котором каждый бит ассоциируется с отдельным пикселем. Другим примером
может служить 52-разрядная битовая строка, в которой каждый бит ассоциируется с некоторой игральной картой. Данное
представление может использоваться для описания карт, которые были сданы игроку в покер. В этой строке битов в единич-
ном состоянии будут находиться только те пять битов, которые ассоциируются с картами, полученными игроком при разда-
че, все остальные биты будут иметь значения 0. Аналогичная 52-разрядная битовая строка, в которой уже 13 битов будут
равны 1, может представлять отдельного игрока в бридж, тогда как 32-разрядная битовая строка может представлять 32 вида
мороженого, выпускаемого изготовителем.
Предположим, что восьмиразрядная ячейка памяти используется как битовое отображение и мы хотим убедиться, что
объект, представленный третьим битом со старшего конца, имеется в наличии. Для этого достаточно выполнить операцию
AND, использовав в качестве операндов весь байт битового отображения и маску 00100000. В результате будет получен
байт, содержащий все нули тогда и только тогда, когда третий со старшего конца бит исходного отображения равен 0. В
этом случае в программе можно предпринять необходимые действия посредством помещения после данной команды AND
соответствующей команды условного перехода. Если же третий со старшего конца бит растрового изображения равен 1, а
нам требуется изменить его значение на 0 без изменения состояния других битов, достаточно выполнить операцию AND,
используя в качестве операндов весь байт с битовым отображением и маску 11011111, а затем записать результат в ту ячей-
ку, где хранился исходный байт битового отображения.