К. Хамахер, З. Вранешич, С. Заки - Организация ЭВМ - 5-е издание (2003) (1114649), страница 37
Текст из файла (страница 37)
3.9. Команды Архитектура системы команд процессора 68000 включает расширенный набор команд, в большей части которых могут использоваться операнды трех разных размеров. Упомянутый набор команд приведен в приложении В. Как правило, все эти режимы адресации используются в командах одинаково. Подобные системы команд называются ортпогональными. В процессоре 68000 имеются команды с одним и двумя операндами. Команда с двумя операндами имеет следующий синтаксис: ОР эгс,сЬг где операция ОР выполняется над исходным операндом ггс и операндом назначения йд Результат помещается по адресу назначения.
На рис. 3.21 приведен пример команды АЭП Ф9,03 выполняющей операцию дэ1 +- 1з~с! + 18зг1 то есть прибавляющей число 9 к содержимому регистра ПЗ и сохраняющей результат в регистре ПЗ. На рис. 3.21, а показан общий формат команды АПП. Один нз ее операндов должен находиться в регистре данных, Пя, а другой — либо в регистре, либо в памяти.
Возможные комбинации приведены в табл. В.4. Поскольку как минимум один из двух операндов всегда содержится в каком-либо из регистров данных, для его идентификации достаточно 3-битового поля. Второй операнд задается в соответствии с табл. В.1. В нашем примере регистр назначения ЭЗ представлен двоичным значением 011 в разрядах с 9 по 11, а непосредственно заданный исходный операнд представлен значением 111100 в разрядах с 0 по 5. 162 Глава 3. Системы команд процессоров АНМ, Мо(ого)а и )п(е) 15 (2П 987 05 Т ~ Размер Код операции Двоичный код 1101011001111100 Шестнадцатеричный код Р 8 7 С Слово кода операции Непосредственно заданный операнд (е2 (а4 РЗ РЗ Перед выборкой команды После выборки команды Рис.
3.21. Команда Аоп №9,03 процессора 68000: формат слова кода операции (а); кодировка слова кода операции (б); последовательность выполнения (в) Размер операнда задается в 2-битовом поле. В нашем примере размер операнда в команде на языке ассемблера не задан явно, поэтому ассемблер по умолчанию считает, что имеет дело с 16-разрядным словом. Согласно табл. В.З, операнды длиной в одно слово обозначаются как 01. Из сказанного следует, что слово кода операции нашей команды АЭП содержит значение 1101011001111100, соответствующее шестнадцатеричному числу Р67С (рис.
3.21, а). Перед выборкой команды счетчик команд указывает на слово кода операции по адресу й После выборки из памяти очередного слова содержимое РС увеличивается на 2. Поэтому после выполнения команд регистр РС указывает на слово кода операции следующей команды, расположенной по адресу г + 4. Команда вычитания, ВПВ, имеет тот же формат, что и команда сложения. Она выполняет операцию 651 +- 15гс] (г]51] 3.9. Команды 163 с[зт +- [згс1 Рассмотрим простую программу для выполнения задачи С +- [А1 + [В1, приведенную на рис.
2.8. Эту задачу можно реализовать следующим образом: МОЧЕ А,ОО АР[2 В,ОО МОЧЕ ОО,С А - 201150 В - 201152 201200 201202 201204 201206 201208 20120А 20120С 20120Е 201210 МОЧЕ А,ОО АРП В,ОО МОЧЕ 00,С С = 202200 Рис. 3.22. Программа для процессора 00000, выполняющая зэдачу С +- [А1 я [В1 Как следует из табл. ВА, команды АОП и Я1В обладают достаточной гибкостью, необходимой для определения одного из двух операндов. Однако второй операнд должен находиться в регистре данных. Большинство других команд с двумя операндами имеют те же ограничения.
Единственной командой, в которой и исходный и результирующий операнды могут задаваться при помощи большинства поддерживаемых процессором адресных режимов, является команда МОЧЕ, выполняющая операцию 164 Глава 3. Системы команд процессоров АНМ, Мо1ого!а и !п1е! Перечисленные команды могут храниться в памяти компьютера 68000 так, как показано на рис. 3.22, на котором приведены шестнадцатеричные значения адресов и операндов. Операнды имеют длину 16 разрядов, а их адреса задаются в абсолютном режиме. Обратите внимание, что в данном случае требуется длинная версия абсолютного режима, поскольку нужный адрес нельзя представить 16-разрядным значением.
Старшие 16 разрядов 32-разрядного адреса помещены, как видите, в младшее слово адреса, а младшие 16 разрядов — в старшее слово, что полностью соответствует соглашению, проиллюстрированному на рис. 3.19. 3.10. Яаык ассемблера Все, что было сказано о языках ассемблера в разделе 2.6, относится и к языку ассемблера процессора 68000. Правда, между ними существуют определенные различия, о которых мы хотели бы поговорить более подробно. Поскольку команды процессора 68000 могут работать с операндами трех разных размеров, размер операнда должен быть задан в команде ассемблера. Для этого к мнемоническому обозначению команды добавляется индикатор размера: для длинного слова — 1., для слова — ЪЧ, а для байта — В. Если команда АгЫ должна работать, скажем, с длинными словами, она записывается как АРР.1, Но если размер операнда не указан, по умолчанию он принимается равным одному слову.
Это означает, что, например, команды АРР.Ъ' №20,Р1 и АР Р №20,Р1 идентичны. Предполагается, что в исходной программе числа задаются в десятичном представлении, если явно не указано иное. Шестнадцатеричное представление обозначается префиксом 8, а двоичное — префиксом Ж. Буквенно-цифровые символы заключаются в одинарные кавычки и заменяются ассемблером их АБСП-кодами.
В кавычках может быть задана строка, состоящая из нескольких символов. В частности, вполне допустима строка 'БТКПЯС3. Все ассемблерные директивы, упоминаемые в разделе 2.6, с незначительными изменениями могут использоваться и в программах для процессора 68000. Начальный адрес блока команд или данных задается при помощи директивы ОКС, Директивы ЕО1) связывают имена с числовыми значениями. Константы включаются в объектную программу при помощи директивы РС (Рейне Сопзгапг -- определение константы). Для указания размера элементов данных применяется индикатор размера. В одной директиве может быль определено несколько элементов. Так, директивы ОКС 100 Р1.АСЕ РС.В 23,$4Е,%10110101 вызывают загрузку шестнадцатеричных значений 17 (23ш), 4Е и Вб в память по адресам 100, 101 и 102 соответственно.
Метке Р?АСЕ присваивается значение 100. Команда Р8 (Рейне Бгога8е — задание области памяти) позволяет зарезервировать блок памяти для данных. Например, команда АККАДА Р8.1. 200 резервирует 200 длинных слов и ассоциирует с адресом первого из них метку АККАДА. 3.11. Управление потоком выполнения программы 166 На рис.
3.23 приведен пример простой ассемблерной программы, соответствующей фрагменту кода на рис. 3.22. Информация об адресе Операция или данных Метка адреса памяти Ассемблерные директивы А В Ассемблерные команды, для которых генерируются машинные команды Ассемблерная директива Рис. 3.23. Полная версия программы, приведенной на рис. 3.22, на языке ассемблера 66000 3.11. Управление потоком выполнения программы Для реализации таких программных структур, как инструкции 11 и циклы, необходимы команды перехода.
В общем случае команда перехода проверяет условие перехода и в зависимости от полученного результата определяет один из двух возможных путей выполнения программы. Проверяемое условие связано с результатом последней реализованной операции. У процессора 68000 имеется пять флагов кодов условий, хранящихся в регистре состояния (рис. 3.18), — четыре описанных в разделе 2.4.6 (Х, Е, Ъ' и С) и один дополнительный, флаг Х (ехтепг1 — расширение). Он устанавливается так же, как флаг С, но не таким большим количеством команд. Это очевидное дублирование удобно для выполнения операций, требующих большой точности, о которых мы поговорим в главе 6. В приложении В, точнее в табл.
ВА, указано, какие флаги соответствуют каждой из команд. Флаги С и Х устанавливаются в 1, если в результате операции сложения происходит перенос из самого старшего разряда. Кроме того, они устанавливаются в 1 в том случае, если в результате операции вычитания не производится перенос, что соответствуег сигналу отрицательного переноса (заема). Так как длина операндов может быть разной, состояние зтих флагов зависит от того, осуществляется ли перенос из разрядов 7, 15 и 31 для операндов длиной в байт, слово 3.11.1.
Флаги кодов условий ЕОБ ОКО ВС.Ж ВС.%' ОЕС МОУЕ АВВ МОЪ'Е Е1ЧВ $202200 $201150 639 -215 $201200 А,ВО В,ВО ВО,С 166 Глава 3. Систвмы команд процессоров АггМ, Мо1ого!а и !п1в! и длинное слово соответственно. Команда МОЧЕ устанавливает флаги Ы и У, в соответствии со скопированным операндом и очищает флаги С и Ч. Флаг Х не изменяется, если операндом назначения не является сам регистр состояния. 3.11.2. Команды перехода Команды условного перехода передают управление команде, расположенной по целевому адресу, но лишь в том случае, если выполнено условие перехода. Этот адрес определяется на основе смещения перехода, заданного в поле операнда. Если условие перехода не выполняется, реализация программы продолжается с команды, непосредственно следующей за командой перехода.