Лабораторная работа 2 “Система команд. Подпрограммы”

advertisement
Кафедра вычислительной техники СПб ГУ ИТМО
Лабораторная работа 2 “Система команд. Подпрограммы”
Цель работы: Знакомство с особенностями системы команд микропроцессоров
PIC18Fxxx. Написание и использование подпрограмм.
Задание
Написать программу на языке ассемблера, которая вычисляет сумму элементов массива
(беззнаковые целые числа). Размерность элементов массива 1 байт (8 бит). Размерность
переменной для хранения суммы элементов 2 байта (16 бит). Значение элементов массива
задается в тексте программы. Программа должна выводить массив переменных и их сумму в
последовательный порт в виде текстовых строк.
Например, так:
или так:
145 + 86 + 154 + 57 = 442
145
+
86
+
154
+
57
=
442
Запись символа в последовательный порт и действия по преобразованию числа в строку
текста оформить в виде подпрограмм.
Тщательно изучите систему команд микропроцессора. Любая задача может быть
выполнена множеством различных способов. Попробуйте создать несколько вариантов
программы, используя разные комбинации команд. Создайте вариант программы занимающей в
памяти минимальный объем.
Пояснения
Блок объявления переменных располагается в начале программы и выглядит следующим
образом:
CBLOCK 0x010
Number1
Counter
Number2:3
ENDC
Параметр “0x010” указывает начальный адрес, с которого переменные будут
располагаться в памяти (SRAM). Через двоеточие после имени переменной указывается
количество байт отводимое для нее в памяти, если количество не указано, то в памяти
выделяется 1 байт. В данном случае под переменные Number1 и Counter отведено по 1 байту, а
под Number2 – 3 байта.
Так как объявляемые таким образом переменные располагаются в памяти данных
(энергозависимая память), инициализировать переменные нужно "вручную" в тексте
программы.
Пример (инициализация переменной Number1):
movlw
D’68’
;WREG = 68
-1-
Кафедра вычислительной техники СПб ГУ ИТМО
movwf
Number1
;Number1 = 68
D’xx’ – означает десятичную константу. По умолчанию все константы считаются
шестнадцатеричными.
Если переменную нужно обнулить, лучше использовать одну команду:
clrf
Counter
;Counter = 0
Структура подпрограммы:
SubProg:
;имя подпрограммы
<тело подпрограммы>
return
;выход из подпрограммы
Для вызова подпрограмм используются команды call и rcall.
call
SubProg1
rcall
SubProg2
Для возврата из подпрограммы используются команды return и retlw NN
Так как данный микропроцессор не поддерживает стек данных, то для передачи
параметров в подпрограмму используются переменные в памяти (глобальные переменные).
Программа должна завершаться бесконечным циклом, либо строиться таким образом,
чтобы она работала по бесконечному алгоритму (так же как и программа из лабораторной
работы 1).
Преобразование числа в строку текста:
1. Разделить число на 10.
2. Получить очередной символ прибавив к остатку от деления код символа ‘0’.
3. Проверить частное на равенство нулю. Если не ноль перейти к п. 1. Если ноль
преобразование закончено.
Символы числа будут вычисляться начиная с младших разрядов.
Пример:
Число: 243 Порядок вычисления символов: ‘3’, ‘4’, ‘2’.
Так как в данном микропроцессоре (PIC18F458) отсутствуют команды деления, эту
операцию нужно реализовать самостоятельно.
Литература.
1. Microchip PIC18FXX8 Data Sheet.
2. MPASM Assembler Help.
3. Стенд SDK-5.0. Руководство пользователя.
-2-
Download