Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы / motorola / 68LAB1.DOC
Скачиваний:
27
Добавлен:
16.04.2013
Размер:
249.25 Кб
Скачать

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>

Соседние файлы в папке motorola