- •Тема №10. Арифметичні операції. Обробка двійкових даних.
- •Приклад
- •Прямі, обернені і доповнюючі коди
- •Аналіз переповнення.
- •Множення.
- •Багатослівне множення.
- •Ділення.
- •Перетворення знаку.
- •Тема №11 Обробка даних в форматах ascii та bcd.
- •Для округлення числа додається число 5 старшого, що відкидається і зсунути результат на кількість розрядів що відкидається. Приклад
- •Тема №12. Обробка таблиць.
- •Приклад програми, яка визначає інвентарну таблицю з 6 рядків і виконує табличний пошук.
- •Title tabsrch (com) Табличний пошук.
Тема №10. Арифметичні операції. Обробка двійкових даних.
Команди додавання і віднімання.
ADD і SUB – команди додавання і віднімання байтів або слід двійкових даних. В процесорі команда віднімання відбувається з використанням додаткових кодів, Додатковий код формується шляхом інвертування прямого коду та додаванням одиниці до молодшого розряду:
1
110101 0001010 0001011
прямий інвертований додатковий
Існує п’ять типів команд ADD і SUB з різним розміщенням даних:
Додавання/віднімання регістр – регістр
пам’ять – регістр
регістр – пам’ять
регістр – безпосередні значення
пам’ять – безпосередні значення
Приклад.
Page 60,132.
TITLE AD_SU (COM) Додавання і віднімання.
CODESG SEGMENT PARA `CODE`
ASSUME CS: CODESG, DS:CODESG, SS:CODESG
ORG IOOH
BEGIN: JMP SHORT MAIN
MAIN PROC NEAR
CALL BIOAD
CALL CIOSU
RET
MAIN ENDP
BYTEA DB 64h
BYTEB DB 40h
BYTEC DB 16h
WORDA DW 4000h
WORDB DW 2000h
WORDC DW 1000h
BIOAD PROC
MOV AL,BYTEA
MOV BL,BYTEB
ADD AL,BL ; додавання регістру до регістру.
ADD AL,BYTEC ; пам’ять і регістр
ADD BYTE,BL ; регістр і пам’ять
ADD BL,IOH ; безпосередньо байт даних і регістр
ADD BYTEA,25H ; безпосередньо байт даних і пам’ять
BIOAD ENDP
CIOSU PROC
MOV AX,WORDA
MOV BX,WORDB
SUB AX,BX ; віднімання регістру BX від AX
SUB AX, WORDC ; пам’ять від регістру
SUB WORDA, BX ; регістр від пам’яті
SUB BX, 1000H ; безпосередньо слово даних від регістру
SUB WORDA, 256H ; безпосередньо слово з пам’яті
RET
CIOSU ENDP
CODESG ENDS
END BEGIN
Прямої операції додавання і віднімання пам’ять - пам’ять не існує і прямої операції безпосередні дані – безпосередні дані також не існує.
Для виконання операції пам’ять – пам’ять необхідно один з операндів переслати в регістр. Для виконання операцій над безпосередніми даними, хоча б один операнд необхідно переслати в пам’ять або регістр.
Операції додавання і віднімання проводяться в додаткових кодах.
При однобайтних операндах – старший біт знаковий і сім біт даних, які охоплюють діапазон від –128 до +127.
При виконанні команди додавання, в якій використовується регістр AL і результат перевищує верхню межу діапазону 127, флаг переповнення і флаг знаку встановлюється в 1:
Приклад
+4Ah +01001010
61h 01100001
ABh
10101011
В таких випадках потрібно користуватися регістром AX.
Команда CBW (Convert Byte to Word) перетворює байт в регістрі AL в слово в регістрі AX. При додаванні слів значення результату може знаходитись в діапазоні від – 32768 до 32767, що в двійковій системі відповідає 15 молодшим бітам і 1 старшому біту знаку.
Додавання більше одного слова.
Існує 2 способи додавання операндів, які перевищують слово.
Нехай необхідно додати дві пари слів WORD1A WORD1B і WORD2A WORD2B і зберегти результат в третій парі слів WORD3A WORD3B.
Спочатку необхідно виконувати операцію над молодшими словами, а потім над старшими.
