Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_10-12.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
173 Кб
Скачать
☆

Приклад

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

У випадку арифметичних операцій з числами різного знаку переповнень не буває ніколи.

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