Искусство схемотехники. Том 3 [Изд.4 е] - Пауль Хоровиц страница 2.

Шрифт
Фон

Пауль Хоровиц, Уинфилд Хилл - Искусство схемотехники. Том 3 [Изд.4-е]

Рис. 11.1. Регистры МП 68000/8.

Процессор содержит 8 регистров данных и 7 адресных регистров, причем все они в полной мере являются регистрами общего назначения; вспомним в связи с этим, что в МП 8086/8 регистр АХ (AL) должен использоваться в операциях ввода-вывода, DX - для адресации к портам и т. д. Регистры данных могут содержать "байты" (8 бит), "слова" (16 бит) и "данные слова" (32 бит), причем тип данных в любой операции указывается непосредственно в обозначении команды на языке ассемблера (см. ниже). Все вычисления и обработка байтов выполняются в регистрах данных.

Адресные регистры используются как указатели памяти или пространства ввода-вывода в 5 из 12 возможных для МП 68000 способов адресации; в адресных регистрах допустимо выполнение лишь нескольких арифметических операций (сложение, вычитание, сравнение, пересылка). Сегменты, как и сегментные регистры, отсутствуют; в микропроцессорах семейства 68000 всегда возможен доступ ко всему адресному пространству (1 или 4 Мбайт для МП 68008 в DIP - или четырехстороннем корпусе, 16 Мбайт для 68000, 4 Гбайт для 68020/30).

В микропроцессоре также имеются: указатель стека (фактически их два, но в каждый данный момент активен только один), программный счетчик PC (именуемый в МП 8086/8 "указатель команд") и регистр состояния SP. Последний содержит флаги (нуля, переноса, переполнения и др.), а также маску прерываний и биты режима.

Память и ввод-вывод. В отличие от МП 8086/8 в процессорах 68000 не предусмотрены отдельные сигналы магистрали ввода-вывода и в их системе команд отсутствуют команды ввода-вывода типа IN и OUT. Ввод-вывод осуществляется так же, как и обращение к памяти, с использованием адресов полной длины и стробирующих сигналов. Для подключения порта ввода-вывода вам следует декодировать адресные линии и сделать так, чтобы регистры ваших портов выглядели, как несуществующая память. Такой метод называется отображением ввода-вывода на пространство памяти; он используется во многих микропроцессорах. (Впрочем, даже в случае самостоятельного протокола ввода-вывода МП 8086 всегда можно отобразить ввод-вывод на пространство памяти с помощью стробирующих сигналов MEMR' и MEMW'.)

Преимущество отображения ввода-вывода на пространство памяти заключается в том, что для операций над регистрами портов можно использовать все команды, предназначенные для работы с памятью. Специальные команды IN/OUT МП 8086/8 заменяет команда MOVE; кроме этого, непосредственно над содержимым портов можно выполнять операции арифметические (сложения, вычитания, циклического сдвига, сравнения, проверки), логические (И, ИЛИ), а также над битами (установка бит, проверка бит). Единственный недостаток отображения ввода-вывода на пространство памяти заключается в необходимости декодировать много адресных линий; практически здесь не возникает трудностей, поскольку при большом адресном пространстве и малом числе портов ввода-вывода нет необходимости декодировать полный адрес (примеры см. ниже).

11.02. Система команд и способы адресации

В табл. 11.1 приведен полный набор команд МП 68000. Чтобы образовать правильный оператор (команду) языка ассемблера, следует указать операнды (с помощью одного из 12 режимов адресации) и тип данных (байтов, слово или длинное слово). На языке ассемблера фирмы Motorola оператор выглядит следующим образом:

ОПЕРАЦИЯ. размер источник, приемник

Здесь ОПЕРАЦИЯ берется из табл. 11.1, размер есть В, W или L (байт, слово или длинное слово соответственно), а источник и приемник могут представлять регистры, непосредственные константы или ячейки памяти. Ниже приведено несколько примеров с указанием способов адресации.

Таблица 11.1.Набор команд МП 68000/8

Операция · Описание

Арифметические

ABCD Сложение упакованных двоично-десятичных чисел

ADD Сложение

ASL Арифметический сдвиг влево

ASR Арифметический сдвиг вправо

CLR Очистка операнда

DIVS Деление (знаковое)

DIVU Деление (беззнаковое)

EXT Расширение знака

LSL Логический сдвиг влево

LSR Логический сдвиг вправо

MOVE Пересылка

MULS Умножение (знаковое)

MULU Умножение (беззнаковое)

NBCD Отрицание упакованного двоично-десятичного числа

NEG Отрицание

SBCD Вычитание упакованного двоично-десятичного числа

SUB Вычитание

Логические

AND Логическое И

BCHG Проверка и изменение бита

BCLR Проверка и очистка бита

BSET Проверка и установка бита

BTST Проверка бита

CHK Проверка регистра на границы

CMP Сравнение

EOR Исключающее ИЛИ

EXG Обмен регистров

NOT Побитовое дополнение

OR Логическое ИЛИ

RESET Возбуждение линии RESET

ROL Циклический сдвиг влево без расширения

ROR Циклический сдвиг вправо без расширения

ROXL Циклический сдвиг влево с расширением

ROXR Циклический сдвиг вправо с расширением

Scc Установить байт по условию

SWAP Обмен половин регистра

TAS Проверка и установка операнда

TST Проверка операнда и установка флагов

Управления

Всс Условный переход

BRA Безусловный переход (относительный)

BSR Переход на подпрограмму (относительный)

DBcc Проверка, декремент и переход

JMP Безусловный переход (7 режимов)

JSR Переход на подпрограмму (7 режимов)

LEA Загрузка эффективного адреса

LINK Подсоединение стека

NOP Холостая команда

PEA Загрузка в стек эффективного адреса

RTE Возврат из исключения

RTR Возврат, восстановление кодов условий

RTS Возврат из подпрограммы

STOP Останов

TRAP Ловушка (векторизованное исключение)

TRAPV Ловушка по переполнению

UNLK Отсоединение стека

Коды условий ("сс")

СС Перенос сброшен

CS Перенос установлен

EQ Равенство нулю

F Никогда не истина

GE Больше или равно нулю

GT Больше нуля

HI Выше

LE Меньше или равно нулю

LS Ниже или равно

LT Меньше нуля

MI Минус

NE Не равно нулю

PL Плюс

T Всегда истина

VC Переполнение сброшено

VS Переполнение установлено

См. "Коды условий".

Не используется в командах Вcс; вместо "ВТ" используйте BRA.

MOVE.W (непосредственная,

# $FFFF,D0 регистровая)

MOVE.B (А0), (А1) (косвенная, косвенная)

ADD.L D5, (А2) + (прямая, косвенная с постинкрементом)

BTST.B #2$C0000 (непосредственная, абсолютная длинная)

В первом примере устанавливаются в 1 все 16 бит регистра D0 (символ "$" обозначает "шестнадцатиричное", а "#" указывает на "непосредственную" константу); вторая команда копирует байт из ячейки памяти, адрес которой находится в А0, в ячейку памяти, адрес которой находится в А1; третья прибавляет 32-разрядное знаковое целое к 4-байтовому ("длинному") целому, которое начинается в памяти с байта, адресуемого через А2, после чего содержимое А2 увеличивается на 4; последняя команда проверяет бит 2 в ячейке памяти С0000Н, устанавливая соответствующим образом флаг нуля Z (для последующей команды условного перехода). Заметьте, что операнды cледуют в порядке - источник, приемник, что противоположно нотации МП 8086.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке