Виконання арифметичних операцій з цілими числами
Множення беззнакових цілих восьмирозрядних чисел (8х8=16)
Алгоритм множення беззнакових цілих чисел реалізує таку послідовність дій (рис. 4.1):
1. Очистити старший байт результату.
2. Завантажити в лічильник циклу число повторень 8.
3. Множник зрушити на один розряд вправо з використанням біта переносу С.
4. Якщо перенос С установлений, додати множник до результату.
5. Старший байт результату змістити вправо з використанням біта переносу С.
6. Молодший байт результату/множник змістити вправо з використанням біта переносу С.
7. Зменшити на одиницю лічильник циклу.
8. Якщо лічильник циклу ще не дорівнює нулю, перейти до кроку 4.
Рисунок 6.1 – Алгоритм програми “mpy8u_c” множення 8-ми розрядних
цілих беззнакових чисел
Ділення беззнакових цілих восьмирозрядних чисел (8/8=8+8).
Алгоритм підпрограми ділення цілих беззнакових чисел (рис. 4.2) можна представити у виді послідовності таких кроків:
1. Очистити залишок і перенос.
2. Завантажити в лічильник циклу число 9.
3. Ділене змістити вліво з використанням переносу.
4. Зменшити на 1 лічильник циклу.
5. Якщо лічильник циклу дорівнює 0, то вийти з підпрограми.
6. Залишок змістити вліво з використанням переносу.
7. Відняти дільник із залишку.
8. Якщо залишок негативний, додати назад дільник, скинути перенос і перейти до кроку 3.
9. Установити перенос і перейти до кроку 3.
Рисунок 4.2 – Алгоритм програми "div8u_з" розподілу цілих беззнакових восьмирозрядних чисел
Текст програми mpy8u_c множення 8-ми розрядних цілих беззнакових чисел
;*****Використання регістрів
.def mc8u =r16 ;множене
.def mp8u =r17 ;множник
.def m8u =r17 ;молодший байт результату
.def m8u =r18 ;старший байт результату
.def mcnt8u=r19 ;лічильник циклу
;*****
mpy8u_c: clr m8u ;очистити старший байт результату
ldi mcnt8u,8 ;ініціалізація лічильника циклу
lsr mp8u ;зрушити вправо множник
m8u_1: brcc m8u_2 ;перехід, якщо С=0
add m8u,mc8u ;додати множене до старшого байту результату
m8u_2: ror m8u ;зрушити вправо старший байт результату
ror m8u ;зрушити вправо молодший
;байт результату і множник
dec mcnt8u ;зменшити на 1 лічильник циклу
brne m8u_1 ;перехід, якщо лічильник циклу ще не дорівнює 0
ret
Текст програми div8u_с ділення 8-ми розрядних цілих беззнакових чисел
;***** Використання регістрів
.def drem8u=r15 ;залишок
.def dres8u =r16 ;результат
.def dd8u =r16 ;ділене
.def dv8u =r17 ;дільник
.def dcnt8u =r18 ;лічильник циклу
;*****
sub drem8u,drem8u ;очистити залишок і перенос
ldi dcnt8u,9 ;ініціалізація лічильника циклу
d8u_1: rol dd8u ;ділене/результат зрушити вліво
dec dcnt8u ;зменшити на одиницю лічильник циклу
brne d8u_2 ;перехід, якщо не нуль
ret ;вихід з підпрограми
d8u_2: rol drem8u ;залишок зрушити вліво
sub drem8u,dv8u ;залишок = залишок - дільник
brcc d8u_3 ;якщо результат < 0
add drem8u,dv8u ;відновити залишок
clc ;скинути перенос для формування результату
rjmp d8u_1 ;інакше
d8u_3: sec ; установити перенос для формування результату
rjmp d8u_1 ;повернутися назад
<== предыдущая лекция | | | следующая лекция ==> |
Реконструкция транспортно-дорожной сети. | | | Приклад виконання завдання |
Дата добавления: 2015-10-19; просмотров: 676;