Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С. М. Іщеряков комп’ютерна схемотехніка.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
266.35 Кб
Скачать

6.4. Алгоритми дiлення двiйкових змiнних

Процедура ділення двійкових чисел реалізується циклічними діями, подібними до операції множення, за виключенням заміни додавання відніманням. Вiдмiтимо iнші характерні особливості операції ділення:

- розрядність частки дорівнює різниці між довжинами діленого та дільника,

- додатково до частки формується не дробова частина, а залишок,

- ділене, як правило, має подвійну довжину порівняно із дільником; якщо розрядності діленого та дільника однакові, то довжина діленого подвоюється за правилами розширення знаку,

- результатом ділення є переповнення, коли дільник дорівнює нулю;

- у випадку подвійної довжини діленого по відношенню до дільника переповнення виникає також, коли старша половина діленого є не меншою за дільник.

Наприклад, для беззнакового дiлення числа 1010 0011 на 1000 0011 дiлене повинно бути представлене як 0000 0000 1010 0011, а дiлення числа 1110 1110 1010 0011 на число 1100 0011 приведе до переповнення :

1110 1110 > 1100 0011.

Розглянемо детальнiше останню особливiсть операцiї дiлення. Виникнення переповнення в даному випадку означає не нескiнченно великий результат, а викликане утворенням результату, розряднiсть якого перевищує розряднiсть частки, тобто виходить за межi розрядноi сiтки результату.

Приклад ділення беззнакових чисел:

0000000011110000 ¦00000111

¦---------------- 11110000 = 240 (дес.),

- 00000111 ¦00100010 - частка 00000111 = 7 (дес.),

------------------- 00100010 = 34 (дес.),

00001000 240: 7 = 34 (2 - залишок)

-00000111

-------------

10 - залишок

Операцiя дiлення може бути представлена n-тактовою (n – кiлькiсть бiт дiльника) послiдовною процедурою утворення частки згiдно наступного алгоритму:

- перед початком процедури дiлене має подвоєну довжину порiвняно iз дiльником; дiльник змiщений максимально влiво (на n розрядiв),

- в кожному i-тому тактi дiльник одноразово зсувається вправо,

- якщо дiлене, а в подальшому, залишок вiд дiленого, менше дiльника, то до частки заноситься нульовий бiт, якщо дiлене, а в подальшому, залишок вiд дiленого, бiльше дiльника, то здiйснюється вiднiмання дiльника вiд частки, а до частки заноситься одиничний бiт.

1. Алгоритм ділення зсувом дільника вправо

Початковий стан: 0000000011110000 - ділене

0000011100000000 - дільник

1) 0000000011110000 - ділене

-0000001110000000 - дільник

віднімання не відбувається, до частки - 0,

2) 0000000011110000 - ділене

-0000000111000000

віднімання не відбувається, до частки - 0,

3) 0000000011110000 - ділене

-0000000011100000

0000000000010000 - залишок

до частки - 1,

4) 0000000000010000 - залишок

-0000000001110000

віднімання не відбувається, до частки - 0,

5) 0000000000010000 - залишок

-0000000000111000

віднімання не відбувається, до частки - 0,

6) 0000000000010000 - залишок

-0000000000011100

віднімання не відбувається, до частки - 0,

7) 0000000000010000 - залишок

-0000000000001110

0000000000000010 - залишок,

до частки - 1,

8) 0000000000000010 - залишок кiнцевий

-0000000000000111

віднімання не відбувається, до частки - 0.

Частка - 00100010, залишок - 00000010.

По аналогii зсуву вправо дiльника вiдносно дiленого, надалi - залишку вiд дiленого, частку можна визначити також згідно алгоритму ділення зсувом вліво діленого, надалі - залишку, при фiксованiй позицii дiльника:

- перед початком процедури дiлене також має подвоєну довжину порiвняно iз дiльником; дiльник змiщений максимально влiво (на n розрядiв),

- в кожному i-тому тактi дiлене, надалi - залишок вiд дiленого, одноразово зсувається влiво,

- якщо дiлене, а в подальшому, залишок вiд дiленого, менше дiльника, то до частки заноситься нульовий бiт, якщо дiлене, а в подальшому, залишок вiд дiленого, бiльше дiльника, то здiйснюється вiднiмання дiльника вiд частки, а до частки заноситься одиничний бiт.

На мал.11 наведені блок-схеми алгоритмів ділення зсувом діленого A вліво (а) та дільника B вправо (б).

2. Алгоритм ділення зсувом вліво діленого, надалі- залишку.

Початковий стан: 0000000011110000 - ділене

0000011100000000 - дільник

1) 0000000111100000 - ділене

-0000011100000000 - дільник

віднімання не відбувається, до частки - 0,

2) 0000001111000000 - ділене

-0000011100000000 - дільник

віднімання не відбувається, до частки - 0,

а) б)

Мал.11. Блок-схема алгоритму ділення зсувом діленого A влiво (а) та зсувом дільника B вправо (б)

3) 0000011110000000 - ділене

-0000011100000000

0000000010000000 – залишок, до частки - 1,

4) 0000000100000000 - залишок

-0000011100000000

віднімання не відбувається, до частки - 0,

5) 0000001000000000 - залишок

-0000011100000000

віднімання не відбувається, до частки - 0,

6) 0000010000000000 - залишок

-0000011100000000

віднімання не відбувається, до частки - 0,

7) 0000100000000000 - залишок

-0000011100000000

0000000100000000 - залишок

до частки - 1,

8) 0000001000000000 - залишок кінцевий,

-0000011100000000

віднімання не відбувається, до частки - 0.

Частка - 00100010, залишок - 00000010.

Алгоритм ділення зсувом вліво діленого, надалі - залишку, дозволяє зберігати дільник в байтовому регістрі та провадити необхідні арифметичні операції з 8-розрядними операндами, що обумовило переважну реалізацію програм ділення на основі цього алгоритму.

Для ділення знакових двійкових чисел необхідно додатково виконати операції визначення знаку частки, модулів діленого та дільника, переведення частки в додатковий код.

Приклад. Потактно виконати дiлення беззнакових змiнних Х та У. Використати алгоритм дiлення зсувом вліво діленого Х, надалі - залишку. Шiстнадцятковi значення змiнних : X = 6E43, У = C4.

Початковий стан: 0110 1110 0100 0011 - ділене Х

1100 0100 - дільник У

такт 1: 1101 1100 1000 0110 - ділене зсунуте влiво

-1100 0100 - дільник

0001 1000 1000 0110 - залишок вiд дiленого, до частки - 1,

такт 2: 0011 0001 0000 1100 - залишок, зсунутий влiво

-1100 0100 - дільник

вiднiмання не вiдбувається, до частки - 0.

Вiднiмання не вiдбувається також в тактi 3, в якому до частки занесеться нульовий бiт.

Такт 4: 1100 0100 0011 0000 - залишок, зсунутий влiво

-1100 0100 - дільник

0000 0000 0011 0000 - залишок, до частки - 1.

В наступних чотирьох тактах вiднiмання не вiдбуватиметься, до частки занесуться чотири нульовi бiти. Останнiй залишок зсунеться чотири рази влiво, що буде його кiнцевою формою:

частка - 1001 0000; залишок - 0000 0011.

Перевiримо результат:

X дec = 28227; У дec = 196; X / У = 28227 / 196 = 144.02;

частка дес = 144; залишок дес = 3;

частка * У + залишок = 144 * 196 + 3 = 28224 + 3 = 28227.