Режимы адресации процессора 68000


Предыдущая | Следующая

Режимы адресации процессора 68000
Операнды могут находиться в различных областях памяти процессора 68000. Они могут быть байтами, словами или длинными словами и размещаться по четным или нечетным адресам. Они могут быть таблицами или отдельными числами. Для локализации операндов удобно иметь много способов их адресации. Процессор 68000 имеет 14 режимов адресации, которые подразделяются на шесть групп.
Далее рассматриваются все шесть общих режимов адресации: неявная, регистровая, непосредственная, абсолютная, косвенная и относительная. Они похожи на режимы адресации процессора 6800 с добавлением косвенной адресации.
При рассмотрении кодов операций и операндов процессора 6800 мы пользовались 16-ричными числами, а не мнемоническими словами, которые применяются в языке ассемблера. Этот язык рассчитан на опытных программистов и не предназначен для специалистов по аппаратным средствам, которые предпочитают работать с 16-ричными кодами. Фактически для тестирования идеально подходит двоичная система, но многие микрокомпьютеры не могут непосредственно воспринимать двоичные коды. Поэтому короткие двоичные тест-программы приходится превращать в 16-ричные коды.
В случае 256 кодов операций, байтовых шины данных и ячеек памяти и небольшого числа регистров процессора применение 16-ричных кодов не встречает трудностей. Однако в 16-битовом компьютере имеются 64К кодов операций по четыре 16-ричных цифры, 16-битовые шина данных и ячейки памяти и 32-битовые регистры, поэтому 16-ричные числа становятся неудобными. Гораздо проще работать с мнемониками команд и соответствующими режимами адресации, поэтому далее применяется именно этот способ. Для ввода в компьютер ассемблерных программ требуется ассемблирующая программа, которая преобразует мнемоники в двоичные или 16-ричные коды для компьютера.
Неявная адресация. В этом простом режиме местонахождение операнда подразумевается мнемоникой команды. Например, при выполнении команды перехода (мнемоника JUMP), в программный счетчик всегда загружается адрес перехода, т.е. программный счетчик всегда подразумевается как регистр, в который загружается адрес назначения. Программный счетчик называется регистром — получателем команды перехода, и, неявно фигурирует в команде перехода (табл. 15.4).
 

Регистровая адресация. В этом режиме, в отличие от неявной адресации, указывается получатель. В процессоре все регистры имеют свои адреса, не связанные с картой памяти.
В процессоре 68000 есть мощная команда передачи MOVE, которая рассматривается далее. Одна из команд MOVE может передать данные из одного регистра процессора в другой. Например, ассемблерная команда MOVE D7, D6 передает содержимое регистра данных D7 в регистр D6 (рис. 15.34). Регистр D7 называется источником и определяется 16 битами. Регистр D7 называется получателем и также определяется 16 битами. Команда передает содержимое источника в получатель.
 

Команда MOVE также определяется 16 битами, которые содержат точное описание операции и режим адресации.
Абсолютная адресация. Она похожа на прямую и расширенную адресацию процессора 6800. Адрес операнда определяется прямо и находится после кода операции. Например, после мнемоники MOVE можно указать $FF23,D4, и содержимое ячейки FF23 передается в регистр D4.
Непосредственная адресация. Этот режим совпадает с аналогичным режимом процессора 6800. Рассмотрим команду MOVE #9,D1. Процессор воспринимает знак # как режим непосредственной адресации, т.е. число после этого знака является операндом. Операнд находится в ячейке памяти сразу после двоичных битов, определяющих знак #. Поэтому процессор передает число 9 из программной ячейки в регистр данных D1.
Косвенная адресация. В этом режиме после мнемоники находится не адрес операнда, а адрес адреса операнда. Косвенный адрес заключается в круглые скобки. Содержимое скобок есть адрес адреса операнда. Примером может служить команда MOVE (A3), D4. На рис. 15.35 в регистре A3 содержится 200, а в ячейке памяти с адресом 200 находится 32F. Вот как выполняется эта команда. Процессор обращается к регистру A3 как адресу-источнику. Он «видит» скобки и знает, что содержимое A3 является не операндом, а адресом операнда. В регистре A3 находится адрес 200. Процессор обращается к ячейке 200 и находит там число 32F, которое и является операндом. После определения косвенного адреса процессор передает содержимое 32F в регистр данных D4.
Косвенная адресация имеет несколько разновидностей, которые важны для программистов. Специалистам по аппаратным средствам достаточно краткого обзора этих вариантов. При необходимости их можно подробно изучить по литературе.
Одним из вариантов является косвенная адресация с преддекрементом иди с постинкрементом. Пред-декремент означает, что до использования содержимого регистра как эффективного адреса он дек-рементируется. Постинкремет означает, что после использования содержимого регистра как адреса он инкрементируется. Например, для указания преддекремента регистра A3 применяется ассемблерное обозначение — (A3), а для постинкремента — обозначение (А3) + . Эти режимы особенно удобны, когда программа должна выполнять циклы с последовательной нумерацией операндов. Команда MOVE обращается ко всем адресам по порядку и работает с байтами, словами и длинными словами.
 

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

 

 Поиск и устранение неисправностей в персональных компьютерах