- •Тема №10. Арифметичні операції. Обробка двійкових даних.
- •Приклад
- •Прямі, обернені і доповнюючі коди
- •Аналіз переповнення.
- •Множення.
- •Багатослівне множення.
- •Ділення.
- •Перетворення знаку.
- •Тема №11 Обробка даних в форматах ascii та bcd.
- •Для округлення числа додається число 5 старшого, що відкидається і зсунути результат на кількість розрядів що відкидається. Приклад
- •Тема №12. Обробка таблиць.
- •Приклад програми, яка визначає інвентарну таблицю з 6 рядків і виконує табличний пошук.
- •Title tabsrch (com) Табличний пошук.
Для округлення числа додається число 5 старшого, що відкидається і зсунути результат на кількість розрядів що відкидається. Приклад
1.Число +12, 345 2. +12, 34555 3. 12, 346555
5 500 5000
О
круглене
число 12, 350 = 12, 35 12,35055 = 12, 35
12, 351565 = 12, 35
Треба пам’ятати, що операції в процесорі відбуваються над двійковими числами, тому зсуву в десятковій системі буде відповідати діленню двійкового числа на 10, а не зсуву на 1 розряд. Звичайно, десяткова кома в війковому числі тільки мається на увазі, але не відображається.
Тема №12. Обробка таблиць.
Таблиці можуть ініціалізуватись символьними і числовими значеннями:
TAB1 DB `JAN`, `FEB`, `MAR`, …, `DEC`
TAB2 DB 205, 208, 209, 215, …
В загальному випадку таблиці можуть містити числові і символьні значення.
На число в таблиці відводиться тетрада, два (байт на два числа), а на кожен символьний елемент байт.
Прямий табличний доступ.
Приклад. Програма виводу за номером місця його назву. Для спрощення будемо використовувати скорочення місяців з 3-х символів. Тоді таблиця визначається як:
MONT BL DB `JAN`
DB `FEB`
DB `MAR`
Адрес елемента `JAN` - MONTBL + 0; `FEB` - MONTEBL + 3; `MAR` - MONTBL + 6 і т. д.
Для локалізації місяця 11, програма повинна виконати наступні кроки:
перетворити введений номер місяця з ASCII 3131 в шістнадцяткове B (точніше у відповідне війкове 00001011);
відняти одиницю від номера місяця 11-1=10
помножити результат на довжину елементів таблиці – 3 10 3 = 30.
додати добуток до початкової адреси MONTBL; в результаті отримати адресу потрібної назви місяця : MONTBL + 30.
Page 60, 132.
TITLE DIRECT (COM) Прямий табличний доступ.
CODESG SEGMENT PARA `Code`
ASSUME CS: CODESG, DS: CODESG, ES: CODESG
ORG 100h
BEGIN JMP SHORT MAIN
THREE DB 3; - кількість байт під один елемент таблиці.
MONIN DB `11`; - номер місяця.
ALFMON DB `???` `$`; - поле для запису результату (назви місяця).
MONTAB DB `JAN`,`FEB`,`MAR`,`APR`,`MAY`,`JUN`,; - ініціалізація
DB `JUL`,`AUG`,`SEP`,`OKT`,`MOV`,`DEC` таблиці назви місяців.
MAIN PROC NEAR ; Основна процедура.
CALL C10CONV ; Перетворення номера місяця в двійковий код.
CALL D10LOC ; Знаходження назви місяця в таблиці.
CALL F10DISP ; Вивід на екран назви місяця.
;Процедура переводу в двійковий код.
С10CONV PROC
MOV AH, MONIN
MOV AL, MONIN+1
XOR AX, 3030h
CMP AH, 00h
JZ C20
SUB AH, AH
ADD AL, 0Ah
C20: RET
C10CONV ENDP
; Виділення місяця з таблиці.
D10L0C PROC
LEA Si, MONTAB ; занесення початкової адреси таблиці.
DEC AL ; формування зміщення.
MUL THREE ; формування зміщення.
ADD Si, AX ; формування адреси потрібного елемента.
MOV CX, 03 ; трьох символьна пересилка.
CLD ;
LEA Di, ALFMON ; занесення початкової адреси результату
REP MOVSB ; пересилка посимвольно назви місяця з адресу Si по адресу Di.
RET ; повернення з процедури.
D10L0C ENDP
;Вивід на екран назви місяця.
F10DISP PROC
LEA DX, ALFMON
MOV AH, 09
INT 21 h
RET
F10DISP ENDP
CODESG ENDS
END BEGIN
Табличний пошук.
Таблиці з унікальними елементами.
Прикладом таблиць з унікальним елементом можуть служити переліки ідентифікаційних кодів, номерів і серій паспортів, телефонні коди міст та ін.
Приклад. Пошук предмету по інвертованому номері. Інвенторні номера і найменування необхідно зв’язати. Вони можуть бути визначені в різних таблицях:
STOKNOS DB `101`, `107`, `109`,…
STOKDCR DB `Excavators`, `Processor`, `Computors`,…
або в одній таблиці:
STOKTAB DB `101`, `Excavaters`
DB `107`, `Processers`
DB `109`, `Computers`
