Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz._9.doc
Скачиваний:
3
Добавлен:
05.05.2019
Размер:
168.96 Кб
Скачать

1.2. Додавання двійкових чисел зі знаком

Насправді мікропроцесор не підозрює про різницю між числами зі знаком та без знаку. Замість цього у нього є засоби фіксування виникнення характерних ситуацій, що складаються в процесі обчислень. Деякі з них ми розглянули під час обговорення додавання чисел без знака:

  • прапор переносу cf, встановлення якого в 1 говорить про те, що стався вихід за межі розрядності операндів;

  • команду adc, яка враховує можливість такого виходу (перенесення з молодшого розряду).

Інший засіб - це реєстрація стану старшого (знакового) розряду операнда, яка здійснюється за допомогою прапора переповнення of в регістрі flags (біт 11).

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

Приклад 1. Додавання чисел 1

30566 = 01110111 01100110

+00687 = 00000010 10101111

31253 = 01111010 00010101

Стежимо за перенесеннями з 14-го і 15-го розрядів і правильністю результату: переносів немає, результат правильний.

Приклад 2. Додавання чисел 2

30566 = 01110111 01100110

+30566 = 01110111 01100110

61132 = 11101110 11001100

Відбувся перенос з 14-го розряду; з 15-го розряду переносу немає. Результат неправильний, тому що є переповнення - значення числа вийшло більше, ніж те, яке може мати 16-бітне число зі знаком (+32 767).

Приклад 3. Додавання чисел 3

-30566 = 10001000 10011010

-04875 = 11101100 11110101

-35441 = 01110101 10001111

Відбувся перенос з 15-го розряду, з 14-го розряду немає переносу. Результат неправильний, так як замість від’ємного числа вийшло додатне (у старшому біті знаходиться 0).

Приклад 4. Додавання чисел 4

–4875 = 11101100 11110101

4875 = 11101100 11110101

–9750 = 11011001 11101010

Є перенесення з 14 і 15-го розрядів. Результат правильний.

Таким чином, ми досліджували всі випадки і з'ясували, що ситуація переповнення (установка прапора of в 1) відбувається при перенесенні:

  • з 14-го розряду (для додатних чисел зі знаком);

  • з 15-го розряду (для від’ємних чисел).

І навпаки, переповнення не відбувається (тобто прапор of скидається в 0), якщо є перенесення з обох розрядів або перенесення відсутнє в обох розрядах.

Отже, переповнення реєструється за допомогою прапора переповнення of. Додатково до прапора of при перенесенні з старшого розряду встановлюється в 1 і прапор переносу cf. Так як мікропроцесор не знає про існування чисел зі знаком і без знака, то вся відповідальність за правильність дій з отриманими числами лягає на програміста. Проаналізувати прапори cf і of можна командами умовного переходу jc\jnc і jo\jno відповідно.

Що ж до команд додавання чисел зі знаком, то вони ті самі, що і для чисел без знака.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]