Приклад. Треба пам’ятати, що операції в процесорі відбуваються над двійковими числами, тому зсуву в десятковій системі буде відповідати діленню двійкового числа на 10
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, програма повинна виконати наступні кроки:
1) перетворити введений номер місяця з ASCII 3131 в шістнадцяткове B (точніше у відповідне війкове 00001011);
2) відняти одиницю від номера місяця 11-1=10
3) помножити результат на довжину елементів таблиці – 3 10 ´ 3 = 30.
4) додати добуток до початкової адреси 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`
Дата добавления: 2015-10-09; просмотров: 465;