Цель работы: Изучить правила выполнения арифметических операций с целыми числами на языке ассемблера.
Краткие теоретические сведения: Две предлагаемые программы используют один и тот же алгоритм. Одна программа “mpy8u_c” имеет оптимизированный код и использует циклическое повторение операций. Другая “mpy8u_s” имеет оптимизированный код, который сокращает время исполнение, и содержит последовательные повторяющиеся участки кода. Обе программы используют четыре регистра, причем для уменьшения количества исп. Регистров, длины кода и времени исполнения множитель и младший байт результата разделяют один и тот же регистр.
Кроме имеющихся двух программ есть еще одна программа “mpy8s”, которая реализует алгоритм Бауса для умножения знаковых чисел. Данная программа способна обеспечить как быстрое время исполнения, так и компактный код. Однако данный алгоритм имеет одно ограничение, о котором необходимо знать. Данный алгоритм не может работать, если множитель имеет минимально возможное значение “-128” и требуется использовать все 16 разрядов результата. Программа “mpy8s” использует четыре регистра, имеет длину кода 8 слов и время исполнения 73 такта.
Выполнение работы:
1. Запускаю среду разработки.
2. Создаю новый проект
3. Создаю ассемблерный файл и прикрепляю его к созданному пректу.
4. набираю код первой программы “mpy8u_c”:
;текст программы mpu8u_c, оптимизированной с точки зрения кода
.include "1200def.inc"
.def mc8u =r16 ;множимое
.def mp8u =r17 ;множитель
.def m8uL =r17 ;младший байт результата
.def m8uH =r18 ;старший байт результата
.def mcnt8u =r19 ;счетчик цикла
mpu8u_c: clr m8uH ;очистка старшего байта результата
ldi mcnt8u,8 ;инициализация счетчика цикла
lsr mp8u ;сдвиг множителя вправо
m8u_1: brcc m8u_2 ;переход, при С=0
add m8uH,mc8u ;прибавление множимого к старшему байту результата
m8u_2: ror m8uH ;сдвижка вправо старшего байта результата
ror m8uL ;сдвижка вправо младшего байта результата и множителя
dec mcnt8u ;уменьшение на 1 счетчик цикла
brne m8u_1 ;переход, если счетчик цикла еще не равен 0
ret
5.Провожу ассемблирование программы, и наблюдаю за результатами ее действий.
6. Выполняю аналогичные действия со следующими программами:
;текст программы mpu8u_s, оптимизированной с точки зрения времени исполнения
.include "1200def.inc"
.def mc8u =r16 ;множимое
.def mp8u =r17 ;множитель
.def m8uL =r17 ;младший байт результата
.def m8uH =r18 ;старший байт результата
.def mcnt8u =r19 ;счетчик цикла
mpu8u_s: clr m8uH
lsr mp8u
brcc noad80
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.