Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Табличный поиск с использованием сравнения строк




3.1. Изменить программу tabsrc1.asm с помощью текстового редактора NORTON следующим образом:

.286

TITLE TABSRC2 (COM) Табличный поиск

CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG

ORG 100H;Начало в конце PSP

BEGIN: JMP SHORT MAIN;Обход через данные

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

STOKNIN DB '123';Элементы данных

STOKTAB DB '035','Excavators';Начало таблицы

DB '038','Lifters '

DB '049','Presses '

DB '102','Valves '

DB '123','Processors'

DB '127','Pumps '

DB '999', 10 DUP (' ');Конец таблицы

DESCRN DB 10 DUP(?)

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

MAIN PROC NEAR

CLD

LEA SI,STOKTAB;Нач. адрес таблицы

A20: MOV CX,03;Сравнивать по 3

LEA DI,STOKNIN;Адрес искомого

REPE CMPSB;Сравнение

JE A30;Если равно - выйти

JA A40;Если больше - прекратить поиск

ADD SI,CX;Прибавить СХ к адресу

ADD SI,10;Прибавить дл. наименования

JMP A20;Следующий эл. таблицы

A30: MOV CX,05;Пересылать 5 слов

LEA DI,DESCRN;Адрес описания

REP MOVSW;Переслать из таблицы

RET

A40: CALL R10ERR;Элемент не найден

RET

MAIN ENDP

 

R10ERR PROC

RET; <Вывод сообщения об ошибке>

R10ERR ENDP

 

CODESG ENDS

END BEGIN

Программа определяет таблицу STOKTAB, включая последний элемент '999' для индикации конца таблицы при поиске. Программа поиска сравнивает содержимое каждого элемента таблицы с содержимым поля STOKNIN.

Так как числовой элемент таблицы превышает длину в два байта, то для операции сравнения используется команда REPE CMPS. Команда REPE CMPS сравнивает байт за байтом, пока байты не будут равны, и автоматически увеличивает содержимое регистров SI и DI.

Регистр СХ инициализируется значением 03, а начальные относительные адреса в регистрах SI и DI устанавливаются равными 05 и 02 соответственно. Сравнение с первым элементом таблицы (035:123) завершается на первом байте, после этого регистр SI содержит 06, регистр DI - 03, регистр СХ - 02. Для следующего сравнения регистр SI должен иметь значение 18, а регистр DI - 02. Корректировка регистра DI сводится к простой перезагрузке адреса STOKNIN.

Увеличение адреса следующего элемента таблицы, который должен быть в регистре SI, зависит от того, на каком байте (первом, втором или третьем) закончилось предыдущее сравнение. Регистр СХ будет содержать число байтов, не участвующих в предыдущем сравнении, в данном случае - 02. Прибавив к содержимому регистра SI значение в регистре СХ и длину наименования, получают относительный адрес следующего элемента:

Адрес в SI после REPE CMPSB 06

Прибавить СХ 02

Прибавить длину наименования 10

-------------------------------------

Относительный адрес след. элемента 18 (12Н)

Так как регистр СХ всегда содержит число байтов, не участвующих в сравнении (если такие есть), то расчет справедлив для всех случаев: прекращение сравнения после первого, второго или третьего байта. Если сравниваются одинаковые элементы, то регистр СХ получит значение 00, а адрес в регистре SI укажет на требуемое наименование.

3.2. Выполнить ассемблирование и компоновку программы. Листинг программы записать в отчет.

3.3. Вызвать отладчик DEBUG на выполнение программы. Просмотреть сегмент кодов перед трассировкой программы. Выполнить трассировку программы до команды REP MOVSW. Проверить сегмент кодов после выполнения команды REP MOVSW. Выводы о выполнении программы записать в отчет.

 





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


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 413 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Слабые люди всю жизнь стараются быть не хуже других. Сильным во что бы то ни стало нужно стать лучше всех. © Борис Акунин
==> читать все изречения...

2257 - | 2182 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.