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

Операции сдвига

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

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

Другим вариантом решения является удаление бита, выходящего за пределы байта, и помещение в освобождающиеся позиции исключительно значения 0. Подобный вариант называют логическим сдвигом. Этот вариант сдвига влево можно использовать для умножения значения байта в дополнительном двоичном коде на число 2. В любом случае сдвиг двоичных цифр влево означает умноже­ние значения на 2, подобно тому как и аналогичный сдвиг десятичных цифр оз­начает умножение на десять. Кроме того, сдвинув двоичную строку вправо, можно выполнить деление ее значения на два. Однако в этом случае нужно обя­зательно сохранить тот знаковый бит, который используется в данной нотации. Для этого часто используется такой вариант сдвига вправо, при котором освобождающаяся позиция (а это, чаще всего, и будет знаковый бит) всегда заполняет­ся тем значением, которое в ней находилось до операции сдвига. Сдвиги, кото­рые не изменяют значения знакового бита, иногда называют арифметическими.

Арифметические операции

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

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

Взаимодействие с другими устройствами

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

Взаимодействие через управляющее устройство

Взаимодействие между машиной и другими устройствами обычно осуществ­ляется через промежуточное устройство, называемое контроллером. Если в каче­стве примера взять персональный компьютер, то контроллер будет представлять собой ту монтажную плату, которая вставляется в разъем на основной плате компьютера (материнской плате). С помощью кабелей платы контроллеров со­единяются с периферийными устройствами, установленными в самом компьюте­ре, а соединение с внешними устройствами осуществляется через промежуточ­ные разъемы, установленные на задней стенке корпуса компьютера.

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

Когда контроллер вставляется в один из разъемов на материнской плате компьютера, он электрически подключается к шине, соединяющей ЦП компьютера и его основную память (рис. 2.8). В месте своего подключения каждый контроллер осуществляет непрерывное наблюдение за сигналами, посылаемыми из ЦП машины, и отвечает на те, которые адресованы непосредственно ему. Более того когда контроллер подключен к шине компьютера, он может посылать сигналы чтения и записи непосредственно в основную память машины, используя для этого те микросекунды, когда ЦП не обращается к шине.

Подобный тип доступа контроллера к основной памяти называется прямым доступом к памяти (DMA — direct memory access) и является важным средством повышения производительности компьютера. Если в компьютере контроллер дисковых устройств обладает прямым доступом к памяти, то ЦП может посылать ему представленные в виде битовых комбинаций запросы, требующие считать с диска определенный сектор и поместить прочитанные данные в указанный блок ячеек основной памяти. Такой блок ячеек называется буфером. В общем случае буфер представляет такое местоположение, где одна система может оставить данные, к которым позднее сможет получить доступ другая система. Пока контроллер будет выполнять затребо­ванную операцию считывания данных, ЦП может продолжать обработку других за­даний. Это означает, что в одно и то же время будут выполняться два разных дейст­вия. ЦП будет выполнять программу, а контроллер в это время будет обеспечивать передачу данных между дисковым устройством и основной памятью компьютера. Такой подход позволяет избежать простоя вычислительных ресурсов во время вы­полнения относительно медленного процесса передачи данных.

Рис 2.8 Подключение контроллеров к шине компьютера

Однако механизм DMA оказывает и определенный отрицательный эффект, по­скольку при этом увеличивается количество взаимодействий, осуществляемых через шину компьютера. Битовые комбинации должны перемещаться между ЦП и основ­ной памятью, между ЦП и каждым из контроллеров, а также между каждым из контроллеров и основной памятью компьютера. Координация всей этой деятельно­сти, осуществляемой через шину компьютера, является важнейшей задачей конст­руирования. Даже в самых лучших проектных решениях центральная шина может превратиться в источник помех в работе компьютера, возникающих из-за того, что ЦП и контроллеры соревнуются между собой за доступ к шине.

Взаимодействие центрального процессора компьютера и каждого из контроллеров осуществляется по тем же принципам, что и взаимодействие ЦП и основной памяти. Чтобы послать некоторую битовую комбинацию контроллеру, эта комбинация должна быть сначала создана в одном из регистров общего назначения процессора. Затем ЦП выполняет команду, подобную STORE, которая позволяет "записать" эту комбинацию в контроллер. Следовательно, единственное отличие между записью битовой комбинации в основную память и пересылкой битовой комбинации в контрол­лер заключается только в месте назначения для доставки комбинации. И действи­тельно, в машинном языке многих компьютеров выполняемая в обоих этих случаях операция имеет один и тот же код. Как правило, при этом схемы основной памяти машины разрабатываются таким образом, чтобы игнорировать ссылки на определен­ные ячейки памяти, тогда как контроллеры конструируются так, чтобы реагировать только на ссылки к этим ячейкам. Поэтому когда ЦП посылает сообщение на шину для записи данных в эти особые ячейки памяти, их получает соответствующий кон­троллер, а не основная память компьютера. Аналогичным образом, когда ЦП пыта­ется считать данные из этих ячеек памяти, например с помощью команды LOAD, он получит битовую комбинацию не из основной памяти, а из соответствующего кон­троллера. Такая схема взаимодействия называется отображением ввода/вывода в память, поскольку различные устройства ввода/вывода компьютера представлены для ЦП как определенные ячейки памяти. Адреса памяти, выделенные контролле­рам при использовании подобной схемы, называются портами, каждый из которых представляет определенное "местоположение", через которое информация попадает в машину или выводится из нее (рис. 2.9).

Рис. 2.9 Концептуальная схема метода отображения ввода/вывода в память

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

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