44579 (Бакалаврская работа. Программная модель 32-разядной МЭВМ фирмы Motorola), страница 3
Описание файла
Документ из архива "Бакалаврская работа. Программная модель 32-разядной МЭВМ фирмы Motorola", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "44579"
Текст 3 страницы из документа "44579"
COP.x ,
где в качестве COP указывается мнемокод соответствующей команды, а вместо x ставится символ, определяющий разрядность операндов: B - байт, W - слово, L - длинное слово. Если после мнемокода отсутствует символ разрядности, то по умолчанию операндом служит слово.
Операнды условно обозначаются как - источник, - приемник, причем в качестве приемника указывается операнд, на месте которого помещается результат операции. При записи конкретных команд в качестве , указываются символические адреса операндов на языке ассемблера в соответствии с используемым способом их адресации. Для одноадресных команд в поле операндов дается один символический адрес, в безадресных командах адрес операнда в явном виде не задается. При непосредственной адресации вместо указывается значение операнда Im, перед которым ставится префиксный символ #.
Числа Im, d8, d16, bd, Abs.W, Abs.L в поле операндов могут даваться в различных системах счисления, которые определяются префиксным символом:
& - десятичное число,
% - двоичное число,
@ - восьмеричное число,
$ - шестнадцатиричное число.
При отсутствии префиксного символа число воспринимается как десятичное.
С целью повышения производительности в CPU32 организован трехступенчатый конвейер выполняемых команд. Контроль состояния конвейера обеспечивается с помощью выходных сигналов процессора:
IPIPE# - принимает значение 0 в первом такте выполнения каждой команды в конвейере;
IFETCH# - принимает значение 0 при загрузке очередной команды в конвейер, а также при освобождении конвейера (отсутствии команд).
Данные сигналы могут использоваться внешним анализатором для контроля текущего состояния процессора.
Ниже в этом разделе рассматриваются команды, выполняемые процессором CPU32. В таблицах для каждой команды дан ее синтаксис на языке ассемблера и указана разрядность операндов: фиксированная (указывается числом) или изменяемая (определяется символом B,W,L, который ставится после мнемокода команды). Операнды, адрес которых вычисляется в соответствии с заданным способом адресации, обозначены символами . При выполнении многих команд для вычисления EA можно использовать только определенные способы адресации.
Команды MOVE, MOVEA и MOVEQ
Команда MOVE, в зависимости от формата её операнда, может перемещать байт, слово или длинное слово из регистра в регистр, между регистром и памятью и между памятью и памятью. Эта команда может также перемещать слово в (из) регистра состояния и длинное слово между пользовательским указателем стека (USP) и регистром адреса. Когда USP определён как операнд, или регистр состояния (SR) - как приёмник операнда, команда становится привилегированной и, следовательно, не может быть выполнена в пользовательском режиме.
Команда MOVEA (move address) предназначена для инициализации адресного регистра. Только слово и длинное слово, как операнды, возможно перемещать непосредственно в адресный регистр. Для операции со словом, операнд-источник перед помещением в регистр адреса переводится в 32-х разрядную сетку с учётом знака.
Команда MOVEQ (move quick) - это укороченная форма команды перемещения непосредственного операнда в регистр данных. Непосредственный операнд ограничен диапазоном от -128 до 127. Под размерностью операции подразумевается длинное слово. Следовательно, 8-битный непосредственный операнд должен быть преобразован в 32-битовый знаковый перед перемещением его в приёмник, которым является регистр данных. Некоторые ассемблеры могут различать три формы: MOVE data, MOVEA и MOVEQ по операндам, т.к. каждая форма определяется своим единственным типом операнда. Для таких ассемблеров некоторые мнемоники команды MOVE могут быть использованы также успешно для MOVEA и MOVEQ, т. к. соответствующие коды операции ассемблируются согласно операнду.
Для иллюстрации работы команды MOVE, присвоим D1=56789ABC, A1=01020304 и CCR=0010001 установим перед выполнением команды. После того, как показанные ниже команды будут выполнены, мы получим следующие результаты:
MOVE #0,CCR На регистр или память нет воздействия,
N=0, Z=0, V=0, C=0, X=0
MOVE.W A1,D1 D1=56780304,
N=0, Z=0, V=0, C=0, X=1
MOVE D1,A1 A1=FFFF9ABC,
N=0, Z=0, V=0, C=1, X=1
MOVE #-10,D1 D1=FFFFFFF6,
N=1, Z=0, V=0, C=0, X=1
Команды MOVEM и MOVEP
Команда MOVEM (move multiple register) переносит слово или длинное слово между списком регистров и последовательно идущими участками памяти. В случае, когда слово перемещают в регистр, каждое слово памяти должно быть преобразовано в 32-х разрядную сетку с учётом знака перед загрузкой в соответствующий регистр. Каждый регистр, участвующий в перемещении, может быть указан в списке и отделён символом "/", возможно также указание в списке начального и конечного регистра, разделенных символом "-". В памяти выделенные регистры всегда располагаются так, что D0 переписывается по младшему адресу, D1 в следующий, ... , затем с A0 по A7, причем A7 записывается в самый верхний адрес памяти. При перемещении регистров в память адрес операнда памяти может определяться в зависимости от управляющего способа адресации или режимом с предекрементом. Для обратного перемещения эффективный адрес может быть определён в зависимости от управляющего способа адресации или режимом с постинкрементом.
Типовое применение команды MOVEM - это запись и восстановление регистров в стек при обращении к подпрограммам. Перед вызовом подпрограммы все регистры могут быть записаны в стек системы посредством выполнения команды
MOVEM.L D0-D7/A0-A6,-(A7)
При возврате в управляющую программу, эти регистры восстанавливаются к своему первоначальному виду командой
MOVEM.L (A7)+,D0-D7/A0-A6
Заметьте, что хотя команда MOVEM.L (A7),D0-D7/A0-A6 будет также восстанавливать содержимое записанных регистров, но указатель стека A7 при этом не будет обновлён с присвоением значения, которое было изначально в вершине стека.
Команда MOVEP (move peripherial data) предназначена для облегчения программного ввода/вывода. Множество интерфейсов ввода/вывода - 8-битные устройства. Для простоты связи между 16-битной адресной шиной и 8-битным устройством ввода/вывода, устройство соединяется с каждым младшим или старшим байтом шины данных. В случае соединения с младшим байтом, все внутренние регистры устройства доступны через последовательность нечётных адресов. В другой конфигурации все внутренние регистры доступны через последовательность чётных адресов. Команда MOVEP может осуществлять ввод/вывод данных из (в) двух (для операции со словом) или четырёх (для операции с длинным словом) последовательно расположенных регистров устройства ввода/вывода. Только косвенный регистровый способ адресации со смещением допускается для определения порта ввода/вывода. На Рис. 14 показаны два примера работы команды MOVEP.
Команды EXG и SWAP
Команда EXG (exchange) осуществляет обмен содержимого двух регистров, в то время как команда SWAP обменивает младшее слово в регистре данных со старшим словом. Подразумевается, что размерность операнда для EXG - длинное слово, для SWAP - слово.
Команды LEA и PEA
Команда 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
Программная модель предоставляет пользователю возможность работы с файлами. Для этой цели в меню “Файл” необходимо выбрать нужное действие (Создание нового программного листа, открытие уже существующего, сохранение редактируемого, его закрытие). Здесь также существует возможность выхода из программы, все в дальнейшем необходимые данные должны быть предварительно сохранены.