
- •Однокристальная микроЭвм мс68нс705с8.
- •Теоретическая часть.
- •Отладочный модуль м68нс05еvм.
- •Блок оэвм.
- •Последовательный интерфейс.
- •Блок программирования.
- •Порты расширения.
- •Внешнее пзу с отладчиком evm-bug.
- •Псевдо-пзу.
- •Команды отладчика evm-bug. Начало работы.
- •Формат командной строки.
- •Команды отладчика evm-bug.
- •Ассемблер/дизассемблер (asm - аSseMbler).
- •Заполнение области памяти (bf - Block Fill).
- •Установка точки останова (br - bReakpoint).
- •Запуск программы на выполнение (g - Go to).
- •Помощь (help).
- •Прозрачный режим (tm - Transparent Mode).
- •Загрузка (load).
- •Отображение памяти (md - Memory Display).
- •Изменение памяти (mm - Memory Modify).
- •Отмена точки останова (nobr - no bReakpoint).
- •Выполнять без учета точек останова (p - Proceed).
- •Отображение регистров (rd - Registers Display).
- •Изменение регистров (rm - Registers Modify).
- •Скорость обмена (speed).
- •Трассировка (т - Trace).
- •Работа с сервером.
- •Кросс-ассемблер. Формат исходной программы. Формат оператора.
- •Поле метки.
- •Поле команды.
- •Поле операнда.
- •Поле комментариев.
- •Элементы программы, определяемые пользователем.
- •Директивы ассемблера.
- •Регистры нс05.
- •Определение методов адресации.
- •Практическая часть.
- •Использование средств сервера для подготовки и загрузки программ.
- •Контрольные вопросы.
Регистры нс05.
В качестве операндов в командах асемблера могут использоваться два внутренних регистра НС05:
a- 8-битный aккумулятор;
x- 8-битный индексный регистр.
Определение методов адресации.
Формат различных типов адресации:
# данные- непосредственная адресация;
*адрес - прямая адресация (0<=адрес<=255);
,x- индексная адресация без смещения;
смещение,x- индексная адресация со смещением ;
адрес- расширенная адресация;
метка- относительная адресация.
Практическая часть.
Во всех последующих лабораторных работах настоящего практикума Вам будет необходимо выполнить стандартную последовательность действий:
· ввод программы в память ОМ;
· ввод исходных данных перед выполнением программы;
· выполнение программы;
· анализ результатов работы программы.
Рассмотрим подробно выполнение указанных операций с использованием команд отладчика EVM-bug на примере простейшей программы, суммирующей содержимое регистра А и ячеек памяти с адресами $50 - $5F, с занесением результата в ячейку памяти с адресом $60.
Исходный текст программы представлен ниже.
Примечание. Система команд НС05 подробно изучается в двух следующих лабораторных работах. Данный пример приведен исключительно для демонстрации возможностей ОМ по вводу и выполнению программ, поэтому приведенная в комментариях информация о работе команд является достаточной на данном этапе.
STA $60 запись регистра А в ячейку $0060
LDX #10 запись в регистр Х количества складываемых ячеек
L1: LDA $4F,X извлечение содержимого очередной ячейки
($005F, $005E, ... $0050)
ADD $60 сложение с содержимым ячейки $0060
STA $60 запись результата в ячейку $0060
DEX уменьшение счетчика количества ячеек на 1
BNE L1 переход на L1, если счетчик равен нулю
NOP команда "нет операции"
Примечание. В приведенных ниже примерах жирным шрифтом выделены команды, выводимые ОМ, информация, которую требуется вводить пользователю, не выделена.
Для ввода программы в память ОМ средствами встроенного отладчика используется команда ASM. Начнем запись программы в псевдо-ПЗУ ОМ с адреса $0100 (возможно расположение программы в другом месте псевдо-ПЗУ или в ОЗУ кроме области стека, см. карту памяти в теоретической части):
>ASM 100 ассемблирование с адреса $01005
0100 00 00 00 BRSET 0,$00,$0103 >STA $60 ввод команды STA
0100 B7 60 STA $60
После ввода первой строки необходимо сделать некоторые пояснения. Рассмотрите рис. 5, на котором поясняется выводимая на монитор командой ASM информация.
Рис. 5. Результат выполнения команды ASM.
Замечание: ниже будет показано, что мнемоника введенной команды может не совпадать с мнемоникой вводимой команды.
Продолжим ввод программы:
0102 00 00 00 BRSET 0,$00,$0105 >LDX #10
0102 AE 10 LDX #$10
0104 00 00 00 BRSET 0,$00,$0107 >LDA 4F,X
0104 E6 4F LDA $4F,X
0106 00 00 00 BRSET 0,$00,$0109 >ADD 60
0106 BB 60 ADD $60
0108 00 00 00 BRSET 0,$00,$010B >STA 60
0108 B7 60 STA $60
010A 00 00 00 BRSET 0,$00,$010D >DEX мнемоника введенной команды
010A 5A DECX не совпадает со вводимой
010B 00 00 00 BRSET 0,$00,$010E >BNE 104
010B 26 F7 BNE $0104
010D 00 00 00 BRSET 0,$00,$0110 >NOP.
010D 9D NOP
>
После ввода программы можно еще раз просмотреть ее листинг, для чего необходимо снова выполнить команду ASM 100 и вводить (RETURN) после каждой команды:
>ASM 100
0100 B7 60 STA $60 >
0102 AE 10 LDX #$10 >
0104 E6 4F LDA $4F,X >
0106 BB 60 ADD $60 >
0108 B7 60 STA $60 >
0109 5A DECX >
010B 26 F7 BNE $0104 >
010D 9D NOP >.
>
Перед выполнением программы необходимо ввести в регистр А и в ячейки памяти исходные данные. Предположим, что значение А перед выполнением программы должно быть равно $00.
Для изменения содержимого регистров используется команда RM:
>RM команда модификации регистров
S=FF регистр SP не может быть изменен
Р=0100>$0100 записываем в программный счетчик адрес начала программы
A=31>0 записываем в аккумулятор исходные данные
X=FF>
C=E8>. завершение команды изменения регистров точкой
>
После ввода исходных данных в регистры можно просмотреть их новое содержимое с помощью команды RD:
>RD
Regs
S=FF P=0100 A=00 X=73 C=E8 111.I...
Ниже приведено пояснение к выдаваемому сообщению:
Для изменения содержимого памяти используется команда ММ. Предположим, что нам необходимо записать в ячейки $50 - $5F следующую исходную информацию:
0050 01 02 03 04 05 06 07 08 09 09 09 09 09 09 09 09
Производим запись (выход из режима модификации памяти также осуществляется вводом точки):
>MM 50
0050=00>01
0051=00>02
0052=00>03
0053=00>04
0054=00>05
0055=00>06
0056=00>07
0057=00>08
Поскольку содержимое ячеек $0058 - $005F должно быть одинаковым, то можно воспользоваться командой заполнения области памяти BF:
>BF 58 5F 09 заполнение ячеек 58 ... 5F кодом 09
Для проверки правильности ввода исходной информации в память введите команду отображения памяти MD:
>MD 50
0050 01 02 03 04 05 06 07 08 09 09 09 09 09 09 09 09 . . . . . . . . . . . . . . . .
Обратите внимание, что если указан только начальный адрес, то выводится 16 байт. Для просмотра большего количества ячеек можно использовать конечный адрес, например:
>MD 50 61
0050 01 02 03 04 05 06 07 08 09 09 09 09 09 09 09 09 . . . . . . . . . . . . . . . .
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 . . . . . . . . . . . . . . . .
После того как введены исходные данные, можно переходить к выполнению программы. Возможны следующие режимы выполнения программы:
Режим трассировки.
Данный режим позволяет выполнять несколько команд программы, число которых задается в качестве параметра команды Т. Если этот параметр отсутствует, выполняется одна команда. Выполнение начинается с текущего адреса, записанного в регистре РС. После выполнения каждой команды на экран выводится строка, которая будет выполняться следующей, и содержимое регистров, аналогично команде RD.
Выполним первую команду нашей программы командой Т (программный счетчик уже установлен на начало программы ранее командой RM):
>T
0102 AE 10 LDX #$10
S=FF P=0102 A=00 X=73 C=ЕA 111.I.Z.
>
Для того, чтобы выполнить следующие 5 команд, необходимо выполнить директиву Т в следующем виде:
>Т 5
0104 E6 4F LDA $4F,X
S=FF P=0104 A=00 X=10 C=Е8 111.I...
0106 BB 60 ADD $60
S=FF P=0106 A=09 X=10 C=Е8 111.I...
0108 B7 60 STA $60
S=FF P=0108 A=09 X=10 C=Е8 111.I...
010A 5A DECX
S=FF P=010A A=09 X=10 C=Е8 111.I...
010B 26 F7 BNE $0104
S=FF P=010B A=09 X=0F C=Е8 111.I...
>
Обратите внимание, что флаг нуля (Z) перед следующей командой не установлен. Выполним команду условного перехода (BNE), которая осуществляет переход на адрес 0104, если флаг Z не установлен (продолжение цикла), или переходит к следующей по порядку команде, если флаг Z установлен (выход из цикла):
>T
0104 E6 4F LDA $4F,X
S=FF P=0104 A=09 X=0F C=Е8 111.I...
>
Убедитесь, что произошел переход на адрес $0104 (содержимое программного счетчика РС стало равным 0104).
Продолжим выполнение программы с использованием директивы G (выполнение до точки останова). Этот режим также часто применяют при отладке программ. Поставим точку останова на адрес $010B (команда условного перехода на начало цикла или выход) командой BR 10B. Продолжите выполнение программы командой G:
>G
При выполнении очередного цикла программа встречает точку останова и на экран выдается сообщение:
Brkpt
S=FF P=010B A=12 X=0E C=F8 111HI...
Обратите внимание, что условие выхода из цикла по-прежнему не выполнено (флаг Z не установлен). На приведенном примере удобно проиллюстрировать очень полезный режим выполнения программы - выполнение с игнорированием точки останова определенное количество раз (директива Proceed). Предположим, что нам необходимо произвести останов перед выполнением все той же команды условного перехода, но в тот момент, когда выполнено условие выхода из цикла. Поскольку счетчик цикла (в качестве которого в нашем примере использовался регистр Х) изначально содержал число 16 и два раза уменьшался на 1 по мере прохождения цикла, то, очевидно, он станет равен нулю, если выполнить цикл еще 14 раз, при этом установится флаг нулевого результата Z и, соответственно, будет выполнено условие выхода из цикла. Для того, чтобы отменить текущую точку останова на 14 шагов, следует использовать команду Р E. Выполните команду:
>P E
Brkpt
S=FF P=010B A=6C X=00 C=ЕA 111.I.Z.
>
Заметьте, что регистр Х обнулен, а в регистре ССR установлен флаг Z. Проверим правильность выполнения команды выхода из цикла, для чего выполним ее директивой T (перед этим необходимо удалить с команды условного перехода точку останова, так как в противном случае она не будет выполняться).
Отмените точку останова командой NOBR 10B:
>NOBR 10B
Brkpts=
Теперь выполните команду условного перехода директивой T и убедитесь, что управление передается следующей команде:
>T
010D 9D NOP
S=FF P=010D A=6C X=00 C=ЕA 111.I.Z.
Проверьте результат работы программы, для чего выполните команды MD 50 60, RD:
>MD 50 60
0050 01 02 03 04 05 06 07 08 09 09 09 09 09 09 09 09 . . . . . . . . . . . . . . . .
0060 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 l . . . . . . . . . . . . . . .
>RD
Regs
S=FF P=010D A=6C X=00 C=EA 111.I.Z.
Нетрудно заметить, что сумма содержимого ячеек $0050 - $005F и аккумулятора действительно равна $6C.