- •Тема №10. Арифметичні операції. Обробка двійкових даних.
- •Приклад
- •Прямі, обернені і доповнюючі коди
- •Аналіз переповнення.
- •Множення.
- •Багатослівне множення.
- •Ділення.
- •Перетворення знаку.
- •Тема №11 Обробка даних в форматах ascii та bcd.
- •Для округлення числа додається число 5 старшого, що відкидається і зсунути результат на кількість розрядів що відкидається. Приклад
- •Тема №12. Обробка таблиць.
- •Приклад програми, яка визначає інвентарну таблицю з 6 рядків і виконує табличний пошук.
- •Title tabsrch (com) Табличний пошук.
Приклад
Page 60,132
TITLE ADD DW (COM) Додавання подвійних слів.
CODESG SEGMENT PARA `code`
ASSUME CS: CODECG, SS: CODESG
ORG iooh
BEGIN JMP SHORT MAIN
WORD1A DW 0123h
WORD1A DW 0BC62h
WORD2A DW 0012h
WORD2A DW 553Ah
WORD3A DW ?
WORD3A DW ?
MAIN PROC NEAR
CALL DIODWD
CALL EIODWD
RET
MAIN ENDP
DIODWD PROC
MOV AX, WORD1B
ADD AX, WORD2B ; додавання молодших слів
MOV WORD3B, AX
MOV AX, WORD 1A
ADC AX, WORD 2A ; додавання старших слів
MOV WORD 3A, AX
RET
DIODWD ENDP
EIODWD PROC
CLC ; обчислити флаг переносу
MOV cx,2 ; встановлення лічильника
LEA SI, WORD1B
LEA DI, WORD2B
LEA BX, WORD3B
E2O:
MOV AX, [si] - перенести слово в АХ
ADC AX, [DI] - додати з врахуванням переносу молодші слова
DEC SI
DEC SI
DEC DI
DEC DI
DEC BX
DEC BX
LOOP E2O
RET
EIODWD ENDP
CODESG ENDS
END BEGIN.
В другому способі виконувати операцію: Sub reg, 02 не можна оскільки може бути зміщений флаг переносу CF.
Для роботи другого методу необхідно: 1) перед циклом очистити флаг переносу командою CLC /Сlear Carry/. 2) Забезпечити відповідний порядок слів; 3) виконати обробку з права на ліво; 4) в регістр CX занести кількість слів, що додаються.
Для здійснення багатослівного віднімання використовується команда SBB/Subtract with Borrow – віднімання з запозиченням. Замінивши в попередніх процедурах команди ADD і ADC на SUB і SBB стримаєм процедури для віднімання.
Прямі, обернені і доповнюючі коди
В усіх кодах додатні числа є однаковими !
Прямі коди – від’ємні числа змінють тільки знак: - 0.1101 = 1.1101 пр.
В обернених кодах від’ємне число повністю інвертується (додаток до одинички):
- 1101 = 1.0010 об.
В
доповнюючих кодах відбувається спочатку
інвертування, а потім додається одиничка:
- 0.1101 1.0010 об. 1.0011д.
Реалізація операції віднімання за допомогою доповнюючих кодів.
При виконанні операції віднімання SUB і SBB слід пам’ятати, що дані сприймаються процесором як без знакові дані : 0.1011 – 0.1001 = 0.1011 +
(-0.1001) = 0.1011д. + 1.0111д= 0.0010
Без знакові і знакові дані.
Для без знакових даних всі біти є бітами даних і слово відображає діапазон від 0 до 65 535. Для знакових даних старший біт є знаковим і слово дозволяє відображати діапазон від – 32 768 до 32 767 . Команди ADD і SUB не розрізняють знакові і без знакові дані, вони просто додають і віднімають:
Приклад:
+11111001 + 249 - без знакове + -7 - знакове
00000010
2
2
11111011
251
-5
Таким чином результат операцій може інтерпретуватися по - різному.
Аналіз переповнення.
У випадку додавання чисел з однаковим знаком можуть виникнути ситуації переповнення розрядної сітки. Переповнення виникають тоді, коли з старшого числового розряду в знаковий і із знакового розряду далі переносяться різні біти.
+0.1011
0.1001
1.0100
– від’ємний результат неможливий
0 1
+1.1010
1.0011
10.1101
– відбулось переповнення
1 0
У випадку арифметичних операцій з числами різного знаку переповнень не буває ніколи.
