Команда EXG (exchange) осуществляет обмен содержимого двух регистров, в то время как команда SWAP обменивает младшее слово в регистре данных со старшим словом. Подразумевается, что размерность операнда для EXG - длинное слово, для SWAP - слово.
Команда LEA (load effective address) перемещает адрес операнда-источника (а не его содержимое) в адресный регистр - приёмник. Следовательно, команда
MOVEA.L #OPER,A1
эквивалентна команде
LEA OPER,A1
Команда PEA (push effective address) записывает адрес операнда-источника в стек системы. Эта команда обычно используется для передачи адресов параметра в подпрограмму через стек. Операндами-источниками для обеих команд LEA и PEA должны быть операнды памяти.
В качестве некоторой иллюстрации к описанным командам, предположим, что мы хотим записать несложную последовательность команд, которая будет перемещать 4 длинных слова из массива ABC в начало массива XYZ. Простая последовательность, выполняющая это, следующая:
MOVE.L ABC,XYZ
MOVE.L ABC+4,XYZ+4
MOVE.L ABC+8,XYZ+8
MOVE.L ABC+12,XYZ+12
Те же действия могут быть выполнены двумя командами:
MOVEM ABC,D0-D3
MOVEM D0-D3,XYZ
Ещё один способ иллюстрируется следующей последовательностью команд:
MOVEA.L #ABC,A1
MOVEA.L #XYZ,A2
MOVE.L (A1)+,(A2)+
MOVE.L (A1)+,(A2)+
MOVE.L (A1)+,(A2)+
MOVE.L (A1)+,(A2)+
В этом способе, использующем постинкрементный способ адресации, одна и та же команда MOVE.L повторяется для перемещения последующих элементов. Следовательно, эта последовательность команд может быть легче преобразована в итерационный цикл для перемещения большого числа элементов между двумя массивами.
Результатом проектирования является программная модель, наиболее точно реализующая все вышеперечисленные особенности микропроцессора MC 68300. Особое внимание уделено способам адресации, в частности программная модель реализует 14 способов адресации предусмотренных в микропроцессоре, возможности ввода данных в различных системах счисления, в частности в системах по основанию 2, 10, 16. Общую структуру программы для наглядности можно представить на рисунке 2:
Ввод
данных
Рисунок 2 – Общая структура программы.
Модуль интерпретатора реализует следующие функции:
- проверку на наличие ошибок в синтаксисе команд, введённых пользователем,
- приведение всех операндов к системе счисления с основанием 16,
- возможность просмотра эффективного адреса операндов (ЕА);
- приведение всех команд к форме, понятной обработчику.
Модуль обработки команд, по желанию пользователя может осуществлять как выполнение всей программы, так и её пошаговую трассировку и осуществляет выполнение команд в соответствии с их мнемокодом.
После обработки команд, у пользователя есть возможность просмотра результата их выполнения, т.е. активным становится модуль интерфейса.
5. Интерфейс, органы управления
После запуска программы пользователь получает доступ к графическому интерфейсу, позволяющему осуществлять ввод, корректировку и вывод данных в диалоговом режиме (рис.1).
Программная модель поддерживает два режима работы: супервизора и пользователя, каждый из которых характеризуется своим множеством операций. После запуска программы появляется окно, позволяющее пользователю выбрать режим работы. В пользовательском режиме процессор работает с определёнными ограничениями. Хотя большинство команд микропроцессора выполняется одинаково в обоих режимах, некоторые команды, вызывающие особые действия в системе, в пользовательском режиме запрещены.
Основной экран программы состоит из двух окон: окно для ввода текста программы (диалоговое окно) и окно отладчика, в котором отражается адрес команды в памяти, положение указателя стека, мнемоника команды и её машинный код. Программная модель обладает возможностью просмотра и корректировки промежуточных результатов выполнения микропроцессорных программ. Для этой цели в неё включены возможности просмотра содержимого регистров микропроцессора. Осуществляется это путём выбора соответствующего подменю в выпадающем меню PopUp (Просмотр/Регистры). Микропроцессор имеет 17 32-разрядных регистров (восемь регистров данных, семь адресных регистров и два указателя стека). Кроме того, в нём есть 32-разрядный счётик команд, в котором используются только младшие 24 разряда. Регистр состояния микропроцессора имеет 16 разрядов. Все эти регистры отображены в соответствующем окне (рис. 2). Закрыть окна просмотра регистров можно щёлкнув на системную иконку закрытия окна или же выбрав в меню пункт “Окно”, ”Закрыть все”
Переключение между режимами осуществляется путём выбора соответствующего режима в меню “Режим”. При переключении между режимами все данные, введённые пользователем должны быть сохранены, о чём появится соответствующая подсказка.
Рис. 4
Программная модель предоставляет пользователю возможность работы с файлами. Для этой цели в меню “Файл” необходимо выбрать нужное действие (Создание нового программного листа, открытие уже существующего, сохранение редактируемого, его закрытие). Здесь также существует возможность выхода из программы, все в дальнейшем необходимые данные должны быть предварительно сохранены.
В меню “Пуск” отражены команды, управляющие выполнением и отладкой микропроцессорных программ. Команда “Выполнить” выполняет программу из диалогового окна. Команда “Останов” прерывает выполнение программы. Команда “Ассемблирование” переводит мнемонику команд в ассемблерный код, который также отображается в соответствующем окне. Команда “Дизассемблирование” наоборот переводит машинный код в мнемонику, понятную пользователю. Команда “Трассировка” позволяет выполнять программу в пошаговом режиме, что может быть полезно для уяснения тонкостей алгоритма выполнения программы, а также может использоваться для устранения ошибок в программном коде.
В меню также существует пункт “Помощь”, где пользователь сможет найти всю интересующую его информацию по работе программной модели, устройству микропроцессора и его системе команд.
Для облегчения работы, наиболее часто выполняемые операции вынесены на панель инструментов.
6. Применение программной модели.
Программная модель дает широкие и удобные возможности для набора и отладки учебных программ (к примеру, может быть возможен одновременный просмотр всех регистров, памяти, ввод команд в мнемонических обозначениях, ассемблирование команд и т. д.).
Применение программной модели дает значительную экономию времени и сил, за счет более удобной отладки и набора программы. Посредством разработанной программы студентам предоставляется возможность изучить различные способы адресации, систему команд и устройство MC 68300.
Примером программы, предложенной для обучения, может служить программа вычисления максимального элемента массива значений, размером в слово (WORD).
move #10,D0 ; задаёт размерность массива 10->DO
M1: move (a1),d1 ; загружает содержимое ячейки памяти по адр. А1->D1
movea d3,A2 ; загружает содержимое регистра D3->A2
move d1,d3 ; D3->D1
sub A2,D1 ;D1-A2->D1
SPL Met ; если положительный результат, то переход на Met:
move a2,d3 ; A2-D3
Met: adda #2,a1 ; A1+2->A1
sub #1,D0 ;D0-1->D0
sne M1 ; если ненулевой результат, то переход на M1
move d3,d0 ; D3->D0.
Посредством наглядного интерфейса пользователь может просмотреть покомандно выполнение программы (так называемый режим трассировки), содержимое регистров и флагов и их изменение при выполнении команд. Существует также возможность быстрого выполнения команды, что обеспечивает возможность почти мгновенного получения результатов обработки.
При разработке программной модели этап лексической обработки текста исходной программы выделяется в отдельный этап работы компилятора, как с методическими целями, так и с целью сокращения общего времени компиляции программы. Последнее достигается за счет того, что исходная программа, представленная на входе компилятора в виде непрерывной последовательности символов, на этапе лексической обработки преобразуется к некоторому стандартному виду, что облегчает дальнейший анализ. При этом используются специализированные алгоритмы преобразования, теория и практика построения которых в литературе проработана достаточно глубоко.
В дальнейшем под лексическим анализом будем понимать процесс предварительной обработки исходной программы, на котором основные лексические единицы
программы - лексемы: ключевые (служебные) слова, идентификаторы, метки, константы приводятся к единому формату и заменяются условными кодами или ссылками на соответствующие таблицы, а комментарии исключаются из текста программы.
Выходами лексического анализа являются поток образов лексем-дескрипторов и таблицы, в последних хранятся значения выделенных в программе лексем.
Дескриптор — это пара вида: (<тип лексемы>, <указатель>),
где <тип лексемы> — это, как правило, числовой код класса лексемы, который означает, что лексема принадлежит одному из конечного множества классов слов, выделенных в языке программирования;
<указатель> — это может быть либо начальный адрес области основной памяти, в которой хранится адрес этой лексемы, либо число, адресующее элемент таблицы, в которой хранится значение этой лексемы.
Количество классов лексем (т.е. различных видов слов) в языках программирования может быть различным. Наиболее распространенными классами являются: