- •Лабораторная работа n1. Изучение программно-аппаратных средств разработки и отладки систем на базе mc68000. Введение
- •Теоретическая часть
- •1. Программная модель мп мс68000
- •1.1 Внутренние регистры
- •Регистры данных Dn
- •Регистры адреса
- •Программный счетчик рс (Program Counter)
- •Регистр состояния sr (Status Register)
- •1.2. Форматы данных и размещение данных в памяти Форматы данных
- •Форматы команд
- •2. Структура и возможности учебного одноплатного компьютера sbc68k
- •Структура организации памяти модуля sbc68k
- •Каналы последовательного обмена.
- •Порты параллельного ввода/вывода.
- •Программируемые таймеры/счетчики.
- •Контроллер дисковода.
- •3. Встроенный монитор (отладчик)
- •Инициализация системы.
- •Символы управления терминалом.
- •Формат командной строки.
- •Выражение в качестве параметра.
- •Адрес в качестве параметра.
- •Сообщения монитора при выполнении команд.
- •Система команд монитора
- •Заполнение блока памяти (Block of memory Fill)
- •Перемещение блока (Block Move)
- •Ввод точек останова (bReakpoint)
- •Поиск ячеек памяти (Block of memory Search)
- •Преобразование данных (Data Conversion)
- •Отображение состояния регистров процессора.
- •Выполнение программы в реальном времени (go)
- •Непосредственное выполнение программы.
- •Выполнение программы до точки останова (Go unTil breakpoint)
- •Вывод справочной информации (hElp)
- •Загрузка программы в память модуля (lOad)
- •Отображение содержимого памяти (Memory Display)
- •Изменение содержимого памяти (Memory Modify)
- •Запись блока данных в память (Memory Set)
- •Удаление точек останова (nobReakpoint)
- •Отображение/изменение содержимого определенного регистра.
- •"Прозрачный" режим работы последовательных портов (Transparent Mode)
- •Трассировка (tRace)
- •Трассировка до текущей точки останова (Trace to Temporary breakpint)
- •3. Встроенный ассемблер/реассемблер.
- •Язык ассемблера mc68000.
- •Мнемонические обозначения и специальные символы
- •Список символов
- •Директива определения константы dc.W (Define Constant.Word)
- •4. Работа с сервером
- •Запуск и работа ассемблера.
- •Кросс-ассемблер. Формат записи программы.
- •Поле метки
- •Операторы в выражениях.
- •Определение методов адресации.
- •Особенности записи в ассемблере некоторых команд Команды переходов.
- •Команда movem.
- •Команды быстрых вычислений (moveq, addq, subq).
- •Директивы ассемблера. Org Установка начального адреса.
- •Equ Определение имени.
- •Set Установка имени.
- •Reg Определение набора регистров.
- •Dc Определение константы.
- •44 43 20 45 78 61 6D 70 6c 65 0d 0a 00 (в шестнадцатиричном виде). Dbc Определение блока констант.
- •Ds Резервирование памяти.
- •End Конец транслируемого файла.
- •Формат s-Record
- •Содержимое записи s-record.
- •Типы записей s-record.
- •Практическая часть
- •1. Ввод исходных данных и анализ результатов работы программы с помощью команд просмотра и модификации памяти и регистров.
- •2. Ввод программы с помощью встроенного ассемблера
- •3. Режимы выполнения программы
- •4. Подготовка, ассемблирование и загрузка программы с помощью программных средств сервера.
Типы записей s-record.
Всего существует несеолько типов S-record, которые применяются для создания единого блока записей S-record:
S0: Запись заголовка блока записей S-record. Поле код/данные может содержать любую символьную информацию идентифицирующую блок S-record. Содержимое поля адреса, как правило, равно нулю.
S1: Запись, содержащая код/данные и 2-байтовый адрес начала загрузки в память кодов/данных.
S2: Запись, содержащая код/данные и 3-байтовый адрес начала загрузки в память кодов/данных.
S3: Запись, содержащая код/данные и 4-байтовый адрес начала загрузки в память кодов/данных.
S5: Запись, содержащая ряд записей типов S1, S2 и S3, объединенных в особый блок. В данной записи нет поля код/данные.
S7: Окончательная запись для блока записей типа S3. Поле адреса, необязательно, может содержать 4-байтовый адрес произвольной команды (команда не буде выполнена). В данной записи нет поля код/данные.
S8: Окончательная запись для блока записей типа S2. Поле адреса, необязательно, может содержать 3-байтовый адрес произвольной команды (команда не буде выполнена). В данной записи нет поля код/данные.
S9: Окончательная запись для блока записей типа S1. Поле адреса, необязательно, может содержать 2-байтовый адрес произвольной команды (команда не буде выполнена). В данной записи нет поля код/данные.
Монитор TUTOR поддерживает записи типа S0, S1, S2, S8 и S9. Блок записей S-record может содержать только одну окончательную запись. Записей заголовка может быть несколько, но обычно используется только одна.
Практическая часть
1. Ввод исходных данных и анализ результатов работы программы с помощью команд просмотра и модификации памяти и регистров.
Монитор TUTOR позволяет пользователю производить запись исходных данных непосредственно в ячейки памяти и в регистры процессора, а также просматривать их содержимое.
Для просмотра группы последовательно лежащих ячеек памяти предназначена директива монитора MD, в параметрах которой указывается адрес начальной ячейки и количество отображаемых байт. Например, выведем на дисплей содержимое 20 ячеек памяти начиная с адреса $1000. Запишем в командной строке директиву MD с соответствующими параметрами (поля директивы и параметров разделяются между собой пробелами):
TUTOR 1.32> MD 1000 14
Примечание.Здесь и далее в примерах жирным шрифтом выделяются сообщения, выдаваемые монитором, обычным шрифтом приводится информация вводимая пользователем с клавиатуры.
Результат выполнения команды (для частного случая заполнения памяти данными) выглядит следующим образом:
TUTOR 1.32> MD 1000 14
001000 0C 00 00 30 6D 28 0C 00 00 39 6E 10 02 80 00 00 . . . Om(. . .9n. . . . .
001010 00 0F 11 C0 10 38 1E 3C 00 E4 4E 4E 0C 00 00 41 . . .@.8.<.dNN. . . A
В каждой строке выводится содержимое 16 байт памяти в шестнадцатеричном виде и в виде ASCII символьного эквивалента. Если код, записанный в ячейке памяти не имеет символьного эквивалента, вместо него записывается точка (.). Следует иметь в виду, что команда MD выводит содержимое памяти только строками по 16 байт. Если в команде не указано количество выводимых байт, то отображается одна строка.
Для ввода данных в память с клавиатуры предназначено несколько команд монитора: BF, MM и MS. Команда заполнения блока памяти BF используется, если необходимо заполнить несколько последовательно расположенных слов памяти (каждое слово состоит из двух байтов) каким-либо одним значением. В команде указываются начальный и конечный адрес заполнения (оба адреса должны быть четными) и величина, которой будут заполнены ячейки. В качестве примера заполним 16 байт памяти начиная с адреса $1000 значением $FF, для чего выполним команду:
TUTOR 1.32> BF 1000 100E FFFF
После ввода команды (RETURN) проверим результат, просмотрев содержимое этих ячеек памяти:
TUTOR 1.32> BF 1000 100E FFFF
PHYSICAL ADDRESS=00001000 0000100E
TUTOR 1.32> MD 1000
001000 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF . . . . . . . . . . . . . . . .
Для заполнения памяти блоком данных используется директива MS. В команде указывается начальный адрес заполнения и строки данных (разделяются пробелами), которые будут записаны в память. Если производится запись числовой строки, то максимально в ней указывается до 4-х байт. Заполним пять байт памяти начиная с ячейки $1000 значениями $12, $34, $56, $78, $44. Введем команду и проверим результат, просмотрев содержимое указанных ячеек:
TUTOR 1.32> MS 1000 12345678 44
TUTOR 1.32> MD 1000
001000 12 34 56 78 44 FF FF FF FF FF FF FF FF FF FF FF .4VxD . . . . . . . . . .
Команда MM позволяет пользователю построчно редактировать содержимое ячеек памяти. После ввода команды на дисплее отображается адрес ячейки памяти (указывается как параметр команды) и ее содержимое, далее следует знак "?", после которого пользователь может записать в ячейку новое значение. Текущее значение ячейки может быть сохранено, если после знака "?" не указывать новых данных. Ввод данных и переход к новой ячейке памяти осуществляется нажатием клавиши RETURN. При этом возможны четыре варианта действия команды: если после введенных данных не следует дополнительных символов, то производится доступ к следующей по порядку ячейке памяти; если после введенных данных указывается символ "^", то производится доступ к предыдущей ячейке; аналогично символ "=" приводит к открыванию текущей ячейки, а точка - к завершению выполнения команды. Единичная ячейка памяти, открываемая командой MM, может иметь размер байта, слова или длинного слова. Проиллюстрируем на примере действие команды MM. Выберем адрес начальной ячейки $1000, доступ будем производить к ячейкам, имеющим размер слово (два байта).
TUTOR 1.32> MM 1000;W
001000 1234 ?FFFF
001002 5678 ?DDDD
001004 44FF ?EEEE^
001002 DDDD ?
001004 EEEE ?
001006 FFFF ?AAAA=
001006 AAAA ?.
TUTOR 1.32> MD 1000
001000 FF FF DD DD EE EE AA AA FF FF FF FF FF FF FF FF . . ]]nn**. . . . . . . .
Содержимое регистров процессора пользователь может узнать выполнив команду монитора DF. Эта команда используется без параметров и после ее выполнения на дисплее отображается содержимое всех доступных регистров процессора, а также одна дизассемблированная команда, на которую указывает счетчик команд. Для того, чтобы узнать содержимое определенного регистра или записать в него новое значение используется команда .Rx , где Rx - название регистра. Если после команды .Rx следуют данные, то они записываются в регистр, если данные отсутствуют, то на дисплей выводится содержимое данного регистра. Рассмотрим работу этих команд на примере:
TUTOR 1.32> .PC 1000
TUTOR 1.32> .D0 3456
TUTOR 1.32> .A7 1500
TUTOR 1.32> .PC
.PC=00001000
TUTOR 1.32> DF
PC=00001000 SR=2700=.S7..... US=FFFFFFFF SS=0000077A
D0=00003456 D1=0000D1D1 D2=0000D2D2 D3=00D3D3D3
D4=0000000D D5=000000DF D6=0000FBFF D7=00000000
A0=00000000 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=0000077A
-----------001000 FFFF DC.W $FFFF
При работе в среде монитора TUTOR может оказаться полезной команда перевода шестнадцатеричных данных в десятичные и наоборот. Команда преобразования данных DC использует в качестве параметра числовое выражение, которое может включать в себя как шестнадцатиричные, так и десятичные данные (шестнадцатиричные данные указываться с префиксом "$", десятичные - с префексом "&"). В результате выполнения команды значение выражения вычисляется и записывается в двух форматах: шестнадцатеричном и десятичном. Проиллюстрируем это примером:
TUTOR 1.32> DC &120
$78=&120
TUTOR 1.32> DC &15+$4-$13
$0=&0
TUTOR 1.32> DC -1000
$FFFFF000=-$1000=-&4096