Задача: Вычислить значение выражения (25 + 13) * (18 – 9), результаты промежуточных вычислений хранить в регистрах. Выделить младшую тетраду результата и поместить её в старшую. Проверить корректность выполнения алгоритма и результаты промежуточных вычислений в симуляторе. Указать результат выполнения алгоритма.
Алгоритм решения задачи представлен на рисунке 18.
Листинг тренировочной программы:
.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; W6 = W6 ^ #0x000F,
; выделение младшей
; тетрады
sl W6, #12, W6; W6 = W6 << 12, сдвиг
; влево на 12 разрядов
.end; Конец исходного файла
Результат выполнения алгоритма – регистр W6 содержит значение 0x6000.
Рисунок 18 – Схема алгоритма к тренировочному заданию