Мнемоники команд процессора 68000



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

Мнемоники команд процессора 68000
Программы для 16-битовых компьютеров лучше всего писать на языке ассемблера, так как число 16-битовых кодов операций более 64000. Каждый код определяет операцию, размер данных и режим адресации для локализации операндов в памяти.
Формат языка ассемблера в битах образует 16-битовые слова. Команда начинается с мнемоники и размера данных. Команды обработки данных воспринимают после мнемоники обозначения В (байт), W (слово) и L (длинное слово). Эта часть командной строки содержится в первых 16 битах строки. Между мнемоникой и размером данных ставится точка. Если размер не определен, процессор 68000 подразумевает 16-битовое слово.
Следующие 16 бит определяют источник данных. В случае непосредственной адресации эти биты являются самими данными. В противном случае биты служат адресом источника. Остальные 16 бит в командной строке служат адресом получателя данных. Между адресами источника и получателя ставится запятая.
Код операции и режимы определяются в одном слове, а операнды занимают следующих одно или два слова. Ассемблерная строка может занимать в памяти от одного до десяти слов. Однословная строка характерна для команд с неявной адресацией. Пятисловная строка может содержать по два слова для адресов источника и получателя.
При зап*иси команды прежде всего нужно найти подходящую мнемонику. Затем определяется размер данных. Все это находится в первой части строки. После этого выбирается один из 14 режимов адресации для локализации операндов. Образуется адрес пересылаемого операнда. Наконец, приходится решать, куда помещается результат операции. Второй режим адресации приходится выбирать во многих командах. Однако для передач данных применяется любой режим. Адресация содержится во второй части ассемблерной строки.
Коды операций процессора 68000 содержат 16 бит. Это сделано намеренно, так как команды всегда могут начинаться по четным адресам. Процессор 68000 работает быстрее с 16-битовыми величинами. Базовой единицей для компьютера служит 16-битовая четная-нечетная единица. Работа с 8-битовыми единицами считается специальным случаем.
Все 56 мнемоник процессора 68000 приведены в табл. 15.5. Напомним, что в процессоре 6800 есть 72 мнемоники. Однако мнемоника определяет только общую функцию команды. Определяющие операцию 16 бит содержат информацию о размере данных, режимах адресации и др.

Команды передач данных. Наиболее мощной командой является команда MOVE с несколькими вариантами (см. табл. 15.5), поскольку она реализует любые передачи данных. Команды загрузки LOAD, сохранения STORE, включения PUSH и извлечения PULL из стека, команды ввода-вывода отсутствуют, так как все они являются разновидностями команды MOVE. Двоичные данные можно передать из любого места в любое другое место.
Есть три основных варианта команды MOVE. Первым является сама команда MOVE, которая заменяет команды LOAD и STORE 8-битовых процессоров. Второй вариант — это команда MOVEM, которая заменяет стековые команды PUSH и PULL других процессоров. Наконец, команда MOVEP применяется с периферийными микросхемами, отображенными на память.
Благодаря многочисленным режимам адресации команда MOVE оказывается очень гибкой. Она может копировать байты, слова и длинные слова между почти всеми регистрами процессора и ячейками памяти. Допускается также копирование данных между ячейками памяти. Для локализации источника применяются десять режимов адресации, а для локализации получателя — семь режимов.

Команда MOVEM предназначена для сохранения регистров при вызове подпрограммы или возникновении прерывания. Она передает любой или все 16 регистров данных и адреса в стек. Содержимое регистров безопасно сохраняется в стеке до тех пор, пока процессор не возобновляет программу после окончания подпрограммы или обслуживания прерывания.
Команды MOVEP в 8-битовых компьютерах нет. Она потребовалась для обеспечения совместимости 16-битового компьютера с предыдущими 8-битовыми компьютерами. Поскольку 8-битовые процессоры приобрели популярность, для них было разработано множество хороших 8-битовых периферийных микросхем. Разработчики процессора 68000 понимали, что необходимо предусмотреть возможность работы с такими микросхемами. Именно для этого и предназначена команда MOVEP.
Ранее было показано, как к 16-битовой шине подключаются две микросхемы PIA: одна к линиям D15 — D8 и вторая — к линиям D7 —DO. На карте памяти биты D15 —D8 находятся по четному адресу, а биты D7 —DO — по нечетному. Предположим, что вам нужно использовать одну микросхему PIA, подключенную к линиям D15 —D8. Чтобы при подготовке загрузить память, данные из 32-битовых регистров процессора нужно поместить по четным адресам. В противном случае нельзя передать данные из памяти в периферийную микросхему по правильным линиям.
Команда MOVEP позволяет взять данные из 32-битового регистра процессора, разделить их на байты и передать в память по четырем четным адресам. Четные адреса подключены к линиям D15 —D8, которые, в свою очередь, подключены к нужной микросхеме PIA.
Имеются также две команды для обмена содержимого регистров процессора. Допускается обмен между любым адресом и регистром данных. Команда EXG обменивает целые регистры, а команда SWAP — только старшие и младшие половины.
Эффективные адреса. Команды LEA и PEA работают с эффективными адресами ЕА. Под эффективным адресом понимается тот окончательный адрес, по которому процессор обращается за операндом. Образование эффективного адреса может быть простым или сложным. В случае непосредственной адресации операнд находится в ячейке памяти после кода операции. В косвенной адресации найти ЕА не так просто. Сначала нужно обратиться к адресу в программной строке. Содержимое этого адреса само является адресом, и процессор обращается по этому второму адресу (он и служит ЕА), где и находится операнд.
Команда LEA загружает в регистр адреса эффективный адрес, а не содержимое по этому адресу. Команда PEA включает эффективный адрес в стек. Обе команды удобны для программирующих на машинном языке; они представляют интерес и для специалистов по аппаратным средствам.
При выполнении программы примерно 70% команд приходится на команды передач данных, а оставшиеся 30% — на все остальные команды.

Команды обработки данных. Фактическую обработку данных в цифровом компьютере проводят арифметические и логические команды. Арифметические команды процессора 68000 представлены в табл. 15.5 (группа 4). Имеются команды сложения (ADD), вычитания (SUB), умножения (MULS, MULU), деления (DIVS, DIVU) и сравнения (СМР), а также команды очистки (CLR), проверки (TST) и знакового расширения (ЕХТ). Они очень похожи на соответствующие команды процессора 6800.
Логические операции представлены командами AND, OR, XOR и NOT. В них определяются адреса источника и получателя. Для проведения логической операции над содержимым регистра и константой применяются команды ANDI, ORI и XORI (группа 5). Константа указывается в программной строке как операнд-источник. Непосредственная адресация позволяет устанавливать и сбрасывать отдельные флажки в регистре кода условия.
Имеются команды арифметического сдвига вправо ASR и влево ASL, логического сдвига вправо LSR и влево LSL (см. группу 6). Команда ASR помещает младший бит во флажки X и С. Старший бит при этом сдвиге не изменяется. Три остальные команды сдвига помещают выдвигаемый бит во флажки X и С, а в освобождаемый бит регистра загружается нуль.
В командах циклического сдвига вправо ROR и влево ROL выдвигаемый бит помещается на место освобождаемого. Кроме того, этот бит копируется во флажок С. Для получения копии выдвинутого бита во флажке X следует пользоваться командами ROXR и ROXL.
В процессоре 68000 предусмотрены гибкие средства проверки бита. Прежде всего команда проверки определяет бит в ячейке памяти или в регистре процессора. Затем она помещает копию выбраннЪго бита во флажок Z. Наконец, команда может изменить состояние выбранного бита.
Например, один бит часто служит ключом ВКЛ/ВЫКЛ станка. Проверяя бит, процессор может узнать состояние станка и предпринять соответствующее действие. Программист встраивает нужное действие в программу, а исполнение осуществляется по результату проверки бита.
Для проверки бита предназначены команды BTST, BSET, BCLR и BCHG (группа 7). С их помощью можно проверить состояние отдельного бита. После этого бит можно установить в единицу, сбросить в нуль или инвертировать.

Манипуляции адресами. Команды передач данных в нужное время передают данные в нужные регистры, где их можно обработать командами обработки данных. Программа работает гладко, так как процессор автоматически начинает с первого адреса программы и выполняет команды последовательно. Однако такого естественного порядка выполнения команд недостаточно. Возникают ситуации, когда еле-
дующую по порядку команду выполнять не нужно. За этой командой процессор должен перейти к другой ячейке в карте памяти (группа 8).
Команды условного (branch) и безусловного (JumP) перехода на первый взгляд, кажутся одинаковыми, но это не так. Во-первых, при записи команды условного перехода образуется позиционно независимый код, а команды перехода передают управление по абсолютному адресу. Во-вторых, команды условного перехода осуществляют передачу управления, если только один из флажков находится в определенном состоянии. Команды безусловного перехода передают управление всегда, и для локализации назначения в них может применяться любой режим адресации.
Команды обоих типов относятся к командам манипуляций адресами. Все они нарушают естественный порядок выполнения команд, передавая управление другому адресу.
Для этого в командах условного перехода к программному счетчику прибавляется смещение, являющееся 8- или 16-битовым знаковым числом, которое находится после кода операции. При выполнении такой команды процессор проверяет состояние флажков. Если условие перехода не удовлетворяется, процессор игнорирует смещение и переходит к следующей по порядку команде. Когда условие удовлетворяется, процессор прибавляет смещение к программному счетчику и образованное в нем значение становится адресом следующей выполняемой команды. Естественный порядок выполнения команд оказывается нарушенным.
Положительное смещение осуществляет передачу управления вперед, а отрицательное назад. Диапазон перехода для 8-битового смещения составляет от —128 (назад) до +127 (вперед), а для 16-битового от -32768 до +32767.
При суммировании смещения с программным счетчиком формируется адрес относительно текущего содержимого программного счетчика. Программный счетчик может адресовать любую ячейку памяти. Смещение оказывается абсолютным, а эффективный адрес относительным. Такой позиционно независимый код удобен для программиста.
В командах безусловного перехода применяются абсолютные адреса, т.е. адрес перехода содержится в команде. При выполнении такой команды процессор загружает в программный счетчик адрес перехода из команды. Новый абсолютный адрес выдается на шину адреса, и естественный порядок выполнения программы нарушается.
В табл. 15.5 команды манипуляций адресами показаны в двух подгруппах как команды безусловного и условного перехода. Имеется всего четыре команды безусловного перехода. Команда BRA прибавляет смещение к программному счетчику, и диапазон перехода составляет от —32768 до +32767, а команда JMP полностью изменяет программный счетчик, и ее диапазон перехода не ограничен. Команды BTS и JTS также являются безусловными и имеют такие же особенности воздействия на программный счетчик.
После перехода к подпрограмме потребуется специальная команда возврата из подпрограммы после ее окончания в основную программу. Имеются две команды возврата RTS и RTR (группа 9). При переходе к подпрограмме адрес возврата сохраняется в стеке. Последней командой в подпрограмме может быть команда RTS, которая возвращает адрес возврата из стека в программный счетчик. После этого возобновляется выполнение основной программы.
Часто при переходе к подпрограмме желательно сохранить и флажки процессора. В этом случае последней командой подпрограммы должна быть команда RTR. Она восстанавливает регистр кода условия из стека состояния флажков .
 

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