Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

Int 21h ;Вывести на экран

DEC NAMECTR ;Это последний элемент?

JNZ K20 ; нет - повторить цикл,

RET ; да - выйти

K10DISP ENDP

; Очистка экрана:

; --------------

Q10CLR PROC

MOV AX,0600H

MOV BH,61H ;Цвет (07 для ч/б)

SUB CX,CX

MOV DX,184FH

INT 10H

RET

Q10CLR ENDP

; Установка курсора:

; -----------------

Q20CURS PROC

MOV AH,02

SUB BH,BH

SUB DX,DX ;Установить курсор в 00,00

INT 10H

RET

Q20CURS ENDP

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.14.6. Сортировка таблицы имен

ОПЕРАТОРЫ ТИПА, ДЛИНА И РАЗМЕРА

________________________________________________________________

Ассемблер содержит ряд специальных операторов, которые могут

оказаться полезными при программировании. Например, при изменении длины

таблицы придется модифицировать программу (для нового определения таблицы)

и процедуры, проверяющие конец таблицы. В этом случае использование

операторов TYPE (тип), LENGTH (длина) и SIZE (размер) позволяют уменьшить

число модифицируемых команд.

Рассмотрим определение следующей таблицы из десяти слов:

TABLEX DW 10 DUP(?) ;Таблица из 10 слов

Программа может использовать оператор TYPE для определения типа (DW в

данном случае), оператор LENGTH для определения DUP-фактора (10) и

оператор SIZE для определения числа байтов (10 х 2 = 20). Следующие

команды иллюстрируют три таких применения:

MOV AX,TYPE TABLEX ;AX=0002

MOV BX,LENGTH TABLEX ;BX=000A (10)

MOV CX,SIZE TABLEX ;CX=0014 (20)

Значения LENGTH и SIZE можно использовать для окончания табличного

поиска или сортировки. Например, если регистр SI содержит продвинутый

адрес таблицы при осуществлении поиска, то проверка на конец таблицы может

быть следующий:

CMP SI,SIZE TABLEX

В главе 23 "Справочник по директивам ассемблера" дается детальное

описание операторов TYPE, LENGTH и SIZE.

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

________________________________________________________________

- Для большинства применений, определяйте таблицы, имеющие

родственные элементы одной длины и формата данных.

- Стройте таблицы на основе форматов данных. Например, элементы могут

быть символьные или числовые длиной один, два и более байтов каждый. Может

оказаться более практичным определение двух таблиц: одна, например, для

трехсимвольных значений номеpов, а другая для двухбайтовых значений цен

единиц товара. В процессе поиска адрес элементов таблицы номеров должен

увеличиваться на 3, а адрес элементов таблицы цен - на 2. Если сохранить

число выполненных циклов при поиске на равно, то, умножив это число на 2

(SHL сдвиг влево на один бит), получим относительный адрес искомого

значения цены. (Начальное значение счетчика циклов должно быть равно -1).

- Помните, что DB позволяет определять значения, не превышающие 256,

а DW записывает байты в обратной последовательности. Команды CMP и CMPSW

предполагают, что байты в сравниваемых словах имеют обратную

последовательность.

- Если таблица подвергается частым изменениям, или должна быть

доступна нескольким программам, то запишите ее на диск. Для внесения

изменений в таблицу можно разработать специальную программу модификации.

Любые программы могут загружать таблицу с диска и при обновлениях таблицы

сами программы не нуждаются в изменениях.

- Будьте особенно внимательны при кодировке сортирующих программ.

Пользуйтесь трассировкой для тестирования, так как малейшая ошибка может

привести к непредсказуемым результатам.

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

________________________________________________________________

14.1. Определите таблицу, которая содержит имена дней недели, начиная

с воскресения.

14.2 Предполагая, что воскресенье равно 1, напишите команды прямого

доступа к таблице, определенной в вопросе 14.1. используйте любые

подходящие имена.

14.3 Определите три отдельных связанных таблицы, содержащих следующие

данные:

а) числовые элементы: 06, 10, 14, 21, 24;

б) элементы наименований: видеокассеты, приемники, модемы,

клавиатуры, дискеты;

в) цены: 93.95, 82.25, 90.67, 85.80, 13.85.

14.4 Составьте программу, позволяющую вводить числовой элемент

(ITEMIN) и количество (QTYIN) с клавиатуры. Используя таблицу из вопроса

14.3, разработайте программу табличного поиска элемента равного ITEMIN.

Выделите из таблиц наименование и цену. Рассчитайте величину стоимости

(Количество х Цена ) и выдайте на экран наименование и стоимость.

14.5 Используя описание таблицы из вопроса 14.3, составьте процедуры:

а) пересылающую содержимое одной таблицы в новую (пустую) таблицу; б)

сортирующую содержимое новой таблицы в восходящей последовательности.