- •Лабораторная работа 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. Подготовка, ассемблирование и загрузка программы с помощью программных средств сервера.
3. Режимы выполнения программы
Запуск программы на выполнение осуществляется с помощью одной из трех директив монитора: GD, GO или GT. Разница в выполнении этих директив определяется различными режимами работы с точками останова. Точки останова устанавливаются для того, чтобы прервать выполнение программы на определенной команде с передачей управления монитору. При определении точки останова указывается адрес этой команды. Точек останова может быть несколько и хранятся они в таблице адресов точек останова. Для записи точки останова используется директива BR. Директива GD запускает программу пользователя по указанному адресу, но игнорирует все установленные точки останова и прерывание выполнения программы по ним не происходит. Для того, чтобы выполнить программу с учетом точек останова, используются директивы GO и GT. Директива GO запускает программу пользователя по указанному адресу. Директива GT запускает программу по адресу, который установлен в счетчике команд (PC), и, кроме того, устанавливает текущую точку останова.
Чтобы продемонстрировать на примере работу этих команд, воспользуемся программой, рассмотренной в предыдущем примере. Перед началом выполнения программы запишем в регистры процессора начальные данные: в регистр A0 адрес $3000 (адрес начала заполнения) и в регистр D0 величину $10 (стартовое число):
TUTOR 1.32> .A0 3000
TUTOR 1.32> .D0 10
Поскольку в результате выполнения программы произойдет заполнение восьми байтов памяти, начиная с адреса $3000, для увеличения наглядности запишем перед выполнением программы в ячейки памяти $3000-$300F нулевое значение:
TUTOR 1.32> BF 3000 300E 0
Установим также одну точку останова на последней команде:
TUTOR 1.32> BR 100E
BREAKPOINTS
00100E 00100E
Запустим программу на выполнение с помощью директивы GO:
TUTOR 1.32> GO 1000
PHYSICAL ADDRESS=00001000
AT BREAKPOINT
PC=0000100E SR=2700=.S7..... US=FFFFFFFF SS=0000077A
D0=00000018 D1=0000FFFF D2=0000D2D2 D3=00D3D3D3
D4=0000000D D5=000000DF D6=0000FBFF D7=00000000
A0=00003008 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=0000077A
-----------00100E 60FE BRA.S $00100E
Завершение выполнения программы произошло после перехода на последнюю команду, где была установлена точка останова. При этом отображается содержимое всех регистров процессора на момент выхода и производится дизассемблирование команды, на которую указывает счетчик команд (т.е по адресу точки останова). Проверим результат работы программы:
TUTOR 1.32> MD 3000
001000 10 11 12 13 14 15 16 17 00 00 00 00 00 00 00 00 . . . . . . . . . . . . . . . .
Если для запуска этой программы использовать директиву GD, то прерывания по точке останова не произойдет, также как и не произойдет выхода в монитор, поскольку последняя команда программы является командой бесконечного цикла. Прервать работу программы можно будет только путем нажатием клавиш ABORT (черного цвета) или RESET (красного цвета). При нажатии RESET производится сброс всех устройств модуля и перезапуск монитора, при этом инициализируется таблица векторов прерываний, меняется состояние регистров процессора, а также сбрасываются некоторые программные установки монитора, например, точки останова. Для выхода из программы без сброса процессора и перезапуска монитора предназначена клавиша ABORT.
Инициализируем новыми значениями регистры D0 (стартовое число $30) и A0 (начальный адрес $3008) и запустим программу директивой GD:
TUTOR 1.32> .A0 3008
TUTOR 1.32> .D0 31
TUTOR 1.32> GD 1000
PHYSICAL ADDRESS=00001000
После запуска выхода в монитор не происходит. Выйдем из программы нажатием на клавишу ABORT:
TUTOR 1.32> GD 1000
PHYSICAL ADDRESS=00001000
SOFTWARE ABORT
PC=0000100E SR=2700=.S7..... US=FFFFFFFF SS=0000077A
D0=00000038 D1=0000FFFF D2=0000D2D2 D3=00D3D3D3
D4=0000000D D5=000000DF D6=0000FBFF D7=00000000
A0=00003010 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=0000077A
-----------00100E 60FE BRA.S $00100E
После выхода через ABORT отображается содержимое всех регистров процессора на момент выхода и производится дизассемблирование команды, на которую указывает счетчик команд. Проверим результат работы программы:
TUTOR 1.32> MD 3000
001000 10 11 12 13 14 15 16 17 31 32 33 34 35 36 37 38 . . . . . . . .12345678
Отладку программы часто удобно производить в режиме трассировки, при котором программа выполняется покомандно и после каждого выполнения очередной команды на дисплей выводится содержимое регистров процессора и производится дизассемблирование следующей по порядку команды. Трассировка выполняется с помощью директив монитора TR и TT. Адрес начала программы должен быть установлен перед трассировкой в счетчике команд (PC). При использовании директивы TR без параметра <количество>, после выполнения очередной команды производится останов, следующая команда выполняется после нажатия клавиши RETURN. Если параметр <количество> указан, то после запуска директивы производится трассировка нескольких команд (число которых определяется данным параметром) и только затем происходит останов, далее работа директивы аналогична предыдущей. Команда TT производит трассировку группы команд до текущей точки останова, которая указывается в параметре. При выполнении команд трассировки все ранее установленные точки останова являются действительными.
Установим начальные значения (А0=$3000, D0=$8) и выполним покомандную трассировку рассмотренной выше программы с помощью директивы TR (удалив предварительно все точки останова):
TUTOR 1.32> NOBR
BREAKPOINTS
TUTOR 1.32> .A0 3000
TUTOR 1.32> .D0 8
TUTOR 1.32> .PC 1000
TUTOR 1.32> TR
PHYSICAL ADDRESS=00001000
PC=00001004 SR=2700=.S7..... US=FFFFFFFF SS=0000077A
D0=00000008 D1=00000007 D2=0000D2D2 D3=00D3D3D3
D4=0000000D D5=000000DF D6=0000FBFF D7=00000000
A0=00003000 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=0000077A
-----------001004 10C0 MOVE.B D0,(A0)+
TUTOR 1.32:>
После входа в режим трассировки появляется новый вид командной строки. Для выхода из трассировки в ней может быть выполнена любая директива монитора. Для продолжения трассировки необходимо нажать RETURN:
PC=00001006 SR=2700=.S7..... US=FFFFFFFF SS=0000077A
D0=00000008 D1=00000007 D2=0000D2D2 D3=00D3D3D3
D4=0000000D D5=000000DF D6=0000FBFF D7=00000000
A0=00003001 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=0000077A
-----------001006 06000001 ADD.B #1,D0
Обратите внимание на изменение содержимого регистра А0 в результате выполнения первой команды.
TUTOR 1.32:> (RETURN)
PHYSICAL ADDRESS=00001006
PC=0000100A SR=2700=.S7..... US=FFFFFFFF SS=0000077A
D0=00000009 D1=00000007 D2=0000D2D2 D3=00D3D3D3
D4=0000000D D5=000000DF D6=0000FBFF D7=00000000
A0=00003001 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=0000077A
-----------00100A 51C9FFF8 DBF.L D1,$001004
TUTOR 1.32:> (RETURN)
PHYSICAL ADDRESS=0000100A
PC=00001004 SR=2700=.S7..... US=FFFFFFFF SS=0000077A
D0=00000009 D1=00000006 D2=0000D2D2 D3=00D3D3D3
D4=0000000D D5=000000DF D6=0000FBFF D7=00000000
A0=00003001 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=0000077A
-----------001004 10C0 MOVE.B D0,(A0)+
Продолжите трассировку до конца программы и проверьте результат ее выполнения:
. . .
. . .
. . .
TUTOR 1.32:> (RETURN)
PHYSICAL ADDRESS=00001006
PC=0000100A SR=2700=.S7..... US=FFFFFFFF SS=0000077A
D0=00000010 D1=00000000 D2=0000D2D2 D3=00D3D3D3
D4=0000000D D5=000000DF D6=0000FBFF D7=00000000
A0=00003008 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=0000077A
-----------00100A 51C9FFF8 DBF.L D1,$001004
TUTOR 1.32:> (RETURN)
PHYSICAL ADDRESS=0000100A
PC=0000100A SR=2700=.S7..... US=FFFFFFFF SS=0000077A
D0=00000009 D1=00000007 D2=0000D2D2 D3=00D3D3D3
D4=0000000D D5=000000DF D6=0000FBFF D7=00000000
A0=00003001 A1=00000000 A2=00000000 A3=00000000
A4=00000000 A5=00000000 A6=00000000 A7=0000077A
-----------00100E 60FE BRA.S $00100E
TUTOR 1.32> MD 3000
001000 08 09 0A 0B 0C 0D 0E 0F 31 32 33 34 35 36 37 38 . . . . . . . .12345678
TUTOR 1.32>