Однокомпонентные способы адресации. Самым простым способом задания места расположения данных является включение его полного адреса в состав команды (рис. 1.19, а). Применительно к основной памяти данных МС такой способ адресации называется прямым (ptr = addr). Прямая адресация дает возможность явно указать на любую конкретную ячейку памяти во всем адресном пространстве DSEG. Примером команды с прямой адресацией служит
Для явного задания полного m-разрядного адреса в команде должно быть выделено m разрядов. С целью сокращения числа разрядов во многих системах используется короткий вариант прямой адресации, обеспечивающий непосредственный доступ к ограниченной, заранее определенной области памяти. Как правило, это наиболее важная нижняя и (или) верхняя часть адресного пространства. Короткая прямая адресация может быть достаточно эффективной в МС гарвардского типа.
Неявная форма представления прямой адресации приводит к указанию конкретной ячейки системной памяти. Такой способ адресации используется крайне редко.
Основной недостаток прямой адресации состоит в том, что манипуляция адресом связана с изменением объектного кода, которое не всегда возможно. Например, в МС гарвардского типа доступ к CSEG с целью модификации объектного кода логически запрещен. В МС неймановского типа доступ к кодовому сегменту может быть тоже запрещен, но уже на физическом уровне, так как исполняемая программа записана в ПЗУ. В любом случае модификация объектного кода нежелательна, что связано со значительными трудностями при его анализе, например, с целью отладки. Использование прямой адресации ограничено случаем, когда расположение данных в памяти известно заранее и не изменяется в процессе исполнения программы. Для МС гарвардского типа могут быть предусмотрены специальные варианты доступа к CSEG с прямой адресацией для считывания констант и постоянных таблиц, которые могут храниться в ней. При этом выбор кодового сегмента кодируется неявно. Применительно к регистровой памяти вариант прямого включения адреса в команду приводит к регистровой адресации (ptr = reg) (рис. 1.19,б). Для прямой ссылки на регистр, входящий в состав небольшой регистровой памяти МС, обычно требуется несколько бит. Кроме того, отсутствуют циклы обращения к системной магистрали. Все это обеспечивает большую эффективность регистровой адресации. Распределение данных по регистрам легко контролируется программистом и не вызывает особых затруднений при ссылке на них. Приведем примеры команд с регистровой адресацией:
MOV reg, addr ;reg(addr)
NEG reg ;reg – reg
В МС широко распространена неявная форма регистровой адресации, когда код операции подразумевает вполне конкретный регистр, например аккумулятор А:
LDA addr ;эквивалентно MOV A, addr
ANA reg ;эквивалентно AND A, reg
На уровне мнемокода регистровая адресация отличается от прямой использованием специальных имен, зарезервированных для обозначения регистров A, X, Ri и т. д. В некоторых системах вводится специальный символ регистровой адресации %:
CLR %n ;Rn0
Здесь n—целое, указывающее на конкретный регистр области. Обычно регистровая адресация—единственный способ доступа к пространству регистров МС.
Прямая адресация портов (ptr = port) используется для адресации изолированного пространства портов ВВ (рис. 1.19, в). Доступ к портам обычно задается неявно кодом операции: