Микропроцессорные средства и системы. Методические указания к лабораторным работам №1-3 на стенде НТЦ-02.31.2
.pdf2. Пример выполнения работы
Задача: Вычислить значение выражения (25 + 13) * (18 – 9), результаты промежуточных вычислений хранить в регистрах. Выделить младшую тетраду результата и поместить её в старшую. Проверить корректность выполнения ал-
горитма и результаты промежуточных вычислений в симуляторе. Указать ре-
зультат выполнения алгоритма.
Листинг программы:
.include "P33FJ32MC204.inc"
.global __reset |
|
|
|
__reset: |
|
|
|
mov |
#25, W0 |
; W0 = 25 |
|
mov |
#13, W1 |
; W1 = 13 |
|
add |
W0, W1, W2 |
; W2 = W0 + W1 |
|
mov |
#18, W3 |
; W3 = 18 |
|
mov |
#9, W4 |
; W4 |
= 9 |
sub |
W3, W4, W5 |
; W5 |
= W3 - W4 |
mul.ss |
W2, W5, W6 |
; W6 |
= W2 * W5 |
and |
#0x000F, W6 |
|
|
sl |
W6, #12, W6 |
; W6 |
= W6 << 12 |
.end |
|
|
|
Результат выполнения алгоритма: Регистр W6 содержит значение 0x6000
3. Варианты индивидуальных заданий к лабораторной работе
Разработать программу в соответствии с вариантом задания. Проверить корректность выполнения алгоритма и результаты промежуточных вычислений в симуляторе. Пометить промежуточные значения переменных на каждом шаге
иуказать результат выполнения алгоритма.
3.1.Загрузить в регистр число 15. Сложить его с 25 и результат поместить на вершину стека. Поместить по адресу 20h внутренней памяти данных млад-
шую десятичную цифру результата, а по адресу 21h – старшую.
31
3.2. Найти разницу чисел 4836 и 2454. Младший байт результата поде-
лить на 2. Поместить по адресу 30h внутренней памяти данных младшую деся-
тичную цифру результата, а по адресу 32h – старшую
3.3. Найти адрес ячейки памяти данных путем перемножения двух чисел
0Сh и 0Eh. В этуячейку записать результат логической операции «исключаю-
щее или» между текущим содержимым регистра W0 и числа 09h.
3.4.Найти частное чисел 236 и 59. Результат умножить на 8 используя операции сдвига. По вычисленному таким образом адресу ячейки внутренней памяти данных размесить результат двойного декремента полученного числа.
3.5.Загрузить регистр W7 числом 023h. Найти сумму W7 + 32. В ячейку внутренней памяти данных, расположенную по вычисленному таким образом адресу, загрузить число десятичных единиц результата сложения.
3.6.Вычислить значение выражения (81 + 64) * (112 - 25) OR 10011010b,
сохраняя промежуточные результаты в стеке.
3.7. Найти разницу чисел 4801 и 209. Число десятичных единиц старшего байта результата поместить в старшую тетраду порта RA. Младшую тетраду оставить без изменений.
4. Контрольные вопросы
4.1.Из каких блоков состоит программа на ассемблере?
4.2.В чём отличие директив и инструкций?
4.3.Укажите синтаксис директив.
4.4.Укажите синтаксис инструкций.
4.5.Каково назначение литералов?
Библиографический список
1.Datasheet. dsPIC33FJ32MC202/204. Microchip. 2012.
2.16-bit MCU and DSC Programmer's Reference Manual. Microchip. 2012.
3.dsPIC33F Family Reference Manual. Section 2. CPU. Microchip. 2007.
32
