Элементы с тремя состояниями или с открытым коллектором подключаются таким образом, чтобы их можно было перевести в отключенное состояние, поскольку при нормальной работе магистрали в каждый момент времени только одно устройство должно выставлять данные на соответствующие линии данных. Каждая ЭВМ придерживается тщательно разработанного протокола для определения того, какое устройство выставляет данные и когда. Если этого не сделать, возникает полный беспорядок, когда все кричат одновременно. (Компьютерщики не могут устоять перед искушением одушевить свои ЭВМ, а также их периферийные устройства и другие узлы. Инженеры идут дальше и обращаются как с живыми с триггерами и другими логическими схемами. Мы, естественно, будем следовать этой традиции.)
Среди разных типов внутренних магистралей компьютеров существует одно интересное различие. Они могут быть либо синхронными, либо асинхронными, в популярных микрокомпьютерах можно найти примеры каждого типа. Что это значит, вы увидите, когда мы будем детально рассматривать взаимодействие отдельных узлов компьютера через магистраль.
Мы вернемся к подробному рассмотрению магистрали с примерами соответствующих интерфейсов, рассматривая популярное семейство IBM PC/XT. Однако сначала нам необходимо познакомиться с набором команд ЦП.
Набор команд компьютера
Для того чтобы понять сигналы магистрали и функционирование компьютера, необходимо выяснить, что делает ЦП во время выполнения различных команд. Соответственно нам хотелось бы познакомить читателя с набором команд семейства IBM PC/XT. К сожалению, набор команд большинства реально существующих микропроцессоров имеет тенденцию к расширению, сопровождающуюся усложнением, наряду с добавлением дополнительных возможностей, и МП Intel 8086 не исключение. Однако поскольку нашей целью является только иллюстрация сигналов магистрали и функционирования компьютера (а не изощренное программирование), рассмотрим сокращенный набор команд — подмножество набора команд МП 8086. Исключив «лишние» команды, мы тем самым решаем проблему выбора ограниченного содержательного подмножества понятных команд, достаточных для программирования любой задачи. Далее мы используем этот набор команд для того, чтобы продемонстрировать несколько примеров функционирования аппаратной части и программирования. Эти примеры помогут выразить идею программирования на уровне машинных команд, что решительно отличается от программирования на таких языках высокого уровня, как
Программирование непосредственно в машинных кодах является исключительно тоскливым занятием, так как приходится иметь дело с колонками двоичных чисел, каждый бит которых существенен. Поэтому вы неизбежно должны использовать программу, называемую
Для того чтобы конкретизировать высказанные соображения, рассмотрим наше подмножество команд языка ассемблера МП Intel 8086/8 и выполним несколько примеров.