Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB1_W95.DOC
Скачиваний:
25
Добавлен:
16.04.2013
Размер:
115.71 Кб
Скачать

Двухоперандные выражения.

символ

назначение

пример

двойной знак меньше (<<)

a<<n - сдвиг а на n бит влево

0h0800<<4=0h8000

двойной знак больше (>>)

a>>n - сдвиг а на n бит вправо

0h0800>>4=0h0080

çíàê ïëþñ (+)

a+b - арифметическое сложение

3+5=8

знак минус (-)

a-b - арифметическое вычитание

3-5=-2

звездочка (*)

a*b - арифметическое умножение (16-ти битовое знаковое)

3*2=6

косая черта (/)

a/b - арифметическое деление (16-ти битовое знаковое)

0hF0/2=0h78

амперсанд (&)

a&b - логическая операция AND

0b0101&0b0011=1

вертикальная черта (|)

a|b - логическая операция OR

0b0101|0b1001=0b0D

крышка или стрелочка (^)

a^b - логическая операция ХOR

0b0101^0b0110=3

Временное переключение систем счисления.

символ

назначение

0b, 0B

двоичная система

0@, 0o, 0O, 0q, 0Q

восьмиричная система

0d, 0D6

десятичная система

0h, 0H, 0x, 0X7

шестнадцатиричная система

Поле комментариев.

Поле комментариев начинается с точки с запятой (;) и заканчивается концом строки. Это поле необязательное и может содержать любые 7-ми битовые ASCII- символы, т.е. латинские буквы, цифры и знаки.

Элементы программы, определяемые пользователем.

Элементы программы, определяемые пользователем - это те элементы, которые определены посредством оператора присваивания (переменные) или объявлены как метки.

При определении элементов программы должны выполняться следующие требования:

·могут быть использованы только буквы латинского алфавита обоих регистров, цифры, знак доллара ($), точка (.) и подчеркиватель (_);

·первым символом не может быть цифра;

·элемент может состоять из произвольного числа элементов, но первые 8 символов должны быть уникальными;

·в элементе не должно быть пробелов и табуляций.

1.1.5. Директивы ассемблера.

Директивы ассемблера располагаются в поле команды и выполняют функции управления процессом ассемблирования. В каждой строке может быть расположена только одна директива.

Директива .area

В начале каждой программы должна находиться директива:

.area SYS (ABS,OVR)

Назначение этой директивы не рассматривается. Использование - обязательно.

Директивы .byte и .db

.byte данные1[,данныеN]

.db данные1[,данныеN]

Директивы .byte и .db размещают в памяти 8-битовые данные. При попытке разместить 16-ти битовые данные старший байт будет отброшен.

Примеры:

lab1: .byte 0h34 ;определить по адресу lab1 1 байт со значением $34

lab2: .db 12,23 ;определить по адресу lab2 2 байта

Директивы .word и .dw.

.word данные1[,данныеN]

.dw данные1[,данныеN]

Директивы .word и .dw размещают в памяти 16-ти битовые данные.

Примеры:

lab1: .word 0hFFFE ;определить по адресу lab1 2 байта: $FF и $FE

lab2: .dw 0d65535,3434 ;определить в памяти 2 слова

Директивы .blkb, .blkw, и .ds

.blkb N

.blkw N

.ds N

Директивы .blkb и .ds резервируют N свободных байтов, а .blkw - N свободных слов.

Примеры:

lab1: .blkb 7 ;зарезервировать 7 свободных байт

lab2: .blkw 0d255 ;зарезервировать 510 байт

lab3: .ds 3 ;зарезервировать 3 байта

Директивы .ascii и .asciz

.ascii строка8

.asciz строка

Директивы .ascii и .asciz размещают в памяти строку 7-ми битных ASCII- символов. Директива .asciz добавляет в конец строки символ NULL (0).

Примеры:

lab1: .ascii "ABC" ;разместить по адресу lab1 строку ABC

lab2: .asciz 'HELLO' ;разместить строку HELLO/0

Директива .radix

.radix символ

Директива .radix устанавливает систему счисления. Символ в определении команды должен соответствовать одному из символов:

B, b - двоичная система;

O, o, Q, q, @ (коммерческое at) - восьмиричная система;

D, d, пустое поле операнда - десятичная система;

H, h, X, x - шестнадцатиричная система.

Директива .org

.org адрес

Директива .org размещает дальнейшую часть программы с адреса, указываемого в поле операнда.

Пример:

.org 03000h ;разместить программу с адреса 3000h

Регистры MC68НС05.

В качестве операндов в командах ассемблера могут использоваться два внутренних регистра ОЭВМ семейства MC68НС05:

A- 8-битный aккумулятор;

X- 8-битный индексный регистр.

Определение методов адресации.

Формат различных типов адресации:

# данные- непосредственная адресация;

*адрес- прямая адресация (0<=адрес<=255);

,x- индексная адресация без смещения;

смещение,x- индексная адресация со смещением ;

адрес- расширенная адресация;

метка- относительная адресация.

1.2. Практическая часть.

Во всех последующих лабораторных работах настоящего практикума Вам будет необходимо выполнить стандартную последовательность действий:

·ввести программу в память ОМ;

·ввести исходные данные перед выполнением программы;

·запустить программу на выполнение;

·проанализировать результаты работы программы.

1.2.1. Подготовка, загрузка и отладка программ.

Рассмотрим подробно выполнение указанных операций с использованием команд отладчика EVM-bug на примере простейшей программы, суммирующей содержимое регистра А и ячеек памяти с адресами $50 - $5F с занесением результата в ячейку памяти с адресом $60. Исходный текст программы представлен ниже.

Примечание. Система команд НС05 подробно изучается в двух следующих лабораторных работах. Данный пример приведен исключительно для демонстрации возможностей ОМ по вводу и выполнению программ, поэтому приведенная в комментариях информация о работе команд является достаточной на данном этапе.

STA $60 запись регистра Àв ячейку $0060

LDX #10 запись в регистр Õколичества складываемых ячеек

L1: LDA $4F,X извлечение содержимого очередной ячейки

($005F, $005E, ... $0050)

ADD $60 сложение с содержимым ячейки $0060

STA $60 запись результата в ячейку $0060

DECX уменьшение счетчика количества ячеек на 1

BNE L1 переход на L1, если счетчик равен нулю

NOP команда "нет операции"

Примечание. В приведенных ниже примерах жирным шрифтом выделены команды, выводимые ОМ, информация, которую требуется вводить пользователю, не выделена.

Для ввода программы в память ОМ средствами встроенного отладчика используется команда ASM. Начнем запись программы в псевдо-ПЗУ ОМ с адреса $0100 (возможно расположение программы в другом месте псевдо-ПЗУ или в ОЗУ кроме области стека, см. карту памяти в теоретической части):

>ASM 100 ассемблирование с адреса $01009

0100 00 00 00 BRSET 0,$00,$0103 >STA $60 ввод команды STA

0100 B7 60 STA $60

После ввода первой строки необходимо сделать некоторые пояснения. Рассмотрим рис. 1.5, на котором поясняется выводимая на монитор командой ASM информация.

Рис. 1.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 >DECX

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

>

После ввода программы можно еще раз просмотреть ее листинг, для чего необходимо снова выполнить команду ASM100 и вводить (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 . . . . . .. . . . . . . . . .

После того, как введены исходные данные, можно переходить к выполнению программы. Возможны два режима выполнения программы: режим трассировки и по команде G.

Режим трассировки позволяет выполнять несколько команд программы, число которых задается в качестве параметра команды Ò. Если этот параметр отсутствует, выполняется одна команда. Выполнение начинается с текущего адреса, записанного в регистреÐÑ. После выполнения каждой команды на экран выводится строка, которая будет выполняться следующей, и содержимое регистров, аналогично команде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 (команда условного перехода на начало цикла или выход) командойBR10B. Продолжите выполнение программы командой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.

Соседние файлы в предмете Отладка микроконтроллеров ЭВМ