Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вычислительные системы-введение.doc
Скачиваний:
6
Добавлен:
14.09.2019
Размер:
453.63 Кб
Скачать

Программы и данные

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

Однако не следует забывать, что данные также содержатся в основной па­мяти и кодируются с помощью нулей и единиц, поэтому машина сама по се­бе не может установить, что именно является данными, что — программой. Если в счетчике адреса, вместо адреса требуемой программы, будет установ­лен адрес данных, то компьютер не сможет предпринять никаких иных дей­ствий, кроме как считать битовые комбинации данных так, как если бы они были командами, и попытаться выполнить их. Полученный результат не­предсказуем и будет зависеть от того, с какими именно данными работала машина.

Тем не менее нельзя сказать, что мы поступаем неверно, придавая и про­граммам и данным одинаковую форму. Благодаря этому одна программа может работать с другими программами (и даже с самой собой) как с обычными дан­ными. Например, можно представить себе программу, которая в результате взаимодействия с окружающей средой изменяет саму себя, получая, таким обра­зом» возможность обучаться. Или другой пример — программа, которая пишет и выполняет другие программы, используя их как средства решения поставленной перед ней задачи.

Арифметические и логические команды

Как мы уже говорили ранее, группа арифметических и логических команд состоит из таких команд, которые требуют выполнения некоторых арифметиче­ских операций, логических или операций сдвига. В этом разделе мы познако­мимся с этими командами более подробно.

Логические операции

В первой главе логические операции AND (И), OR (ИЛИ) и XOR (исключающее ИЛИ) были представлены как операции, которые комбинируют значения двух входных двоичных разрядов в целях получения одного двоичного разряда на выходе. Эти операции могут быть расширены, т.е. они могут рассматриваться как операции, комбинирующие значения двух строк битов для по­лучения одной строки битов на выходе, что достигается посредством применения соответствующей базовой операции к отдельным позициям в строках. Например, результат применения операции AND к строкам битов 10011010 и 11001001 бу­дет следующим.

10011010

AND

11001001

10001000

Другими словами, при выполнении этой строковой операции результат опе­рации AND для двух битов в каждой позиции исходных строк просто записыва­ется в этой же позиции строки результата. Аналогичным образом при выполне­нии операций OR и XOR с теми же входными строками битов будут получены следующие результаты.

10011010 10011010

OR 11001001 XOR 11001001

11011011 01010011

Операции AND чаще всего используются для помещения нулей в некоторую часть битовой комбинации (не затрагивая при этом другую ее часть). Например, давайте посмотрим, что произойдет, если байт 00001111 использовать в качестве первого операнда логической операции AND. Даже не имея никакой информации о втором операнде, можем сразу же сделать вывод, что четыре старших бита строки результа­та всегда будут равны 0. Более того, можно также заранее утверждать, что четыре младших бита строки результата будут копиями соответствующих битов второго операнда, что непосредственно подтверждается следующим примером.

00001111

AND 10101010

00001010

Подобное применение операции AND является примером процедуры, называемой маскированием. Первый операнд, или маска, определяет ту часть второго операнда, которая будет способна оказать воздействие на результат операции. В случае опера­ции AND результатом маскирования будет частичная копия второго операнда, в ко­торой нули заполняют те позиции, которые не подлежат дублированию.

Такая операция полезна при работе с битовыми отображениями, т.е. строкой битов, в которой каждый бит представляет наличие или отсутствие определенно­го объекта. Мы уже встречались с битовыми отображениями при изучении рас­трового представления изображений, в котором каждый бит ассоциируется с от­дельным пикселем. Другим примером может служить 52-разрядная битовая строка, в которой каждый бит ассоциируется с некоторой игральной картой. Данное представление может использоваться для описания карт, которые были сданы игроку в покер. В этой строке битов в единичном состоянии будут находиться только те пять битов, которые ассоциируются с картами, полученными игроком при раздаче, все остальные биты будут иметь значения 0. Аналогичная 52-разрядная битовая строка, в которой уже 13 битов будут равны 1, может представлять отдельного игрока в бридж, тогда как 32-разрядная битовая строка может представлять 32 вида мороженого, выпускаемого изготовителем.

Предположим, что восьмиразрядная ячейка памяти используется как битовое отображение и мы хотим убедиться, что объект, представленный третьим битом со старшего конца, имеется в наличии. Для этого достаточно выполнить операцию AND, использовав в качестве операндов весь байт битового отображения и маску 00100000. В результате будет получен байт, содержащий все нули тогда и только тогда, когда третий со старшего конца бит исходного отображения равен 0. В этом случае в программе можно предпринять необходимые действия посредством поме­щения после данной команды AND соответствующей команды условного перехода. Если же третий со старшего конца бит растрового изображения равен 1, а нам требу­ется изменить его значение на 0 без изменения состояния других битов, достаточно выполнить операцию AND, используя в качестве операндов весь байт с битовым ото­бражением и маску 11011111, а затем записать результат в ту ячейку, где хранился исходный байт битового отображения.

Если операция AND может использоваться для дублирования части битовой стро­ки с помещением нулей во все биты другой ее части, то операция OR может приме­няться для дублирования части строки с помещением во все ее оставшиеся биты единиц. Для этого также используется определенная маска, но на этот раз те пози­ции, значения которых должны быть продублированы, отмечаются в ней нулями, а единицами заполняются все остальные позиции, не подлежащие дублированию. Приведем пример. При выполнении операции OR с любым байтом и битовой комби­нацией 11110000 будет получен результат, в котором четыре старших бита всегда будут содержать единицы, тогда как младшие биты будут просто копиями битов ис­ходного операнда, что демонстрируется следующим примером.

11110000

OR 10101010

11111010

Таким образом, если операция AND с маской 11011111 может использоваться для того, чтобы поместить значение 0 в третий со старшего конца бит некоторого восьмиразрядного битового отображения, то операция OR с маской 00100000 может применяться для установки этого же бита в единицу.

Операция XOR чаще всего используется для создания строки дополнения к некоторой строке битов. Например, обратите внимание на взаимосвязь между вторым операндом и строкой результата.

11111111

XOR 10101010

01010101

Операция XOR между любым байтом и байтом, содержащим все 1, дает в ре­зультате байт дополнения к исходному байту.