Виконання арифметичних операцій з цілими числами

Множення беззнакових цілих восьмирозрядних чисел (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; просмотров: 671;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.013 сек.