Приклад. Треба пам’ятати, що операції в процесорі відбуваються над двійковими числами, тому зсуву в десятковій системі буде відповідати діленню двійкового числа на 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; просмотров: 472;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.