Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


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




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; ћы поможем в написании ваших работ!; просмотров: 389 | Ќарушение авторских прав


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

Ћучшие изречени€:

Ќачинать всегда стоит с того, что сеет сомнени€. © Ѕорис —тругацкий
==> читать все изречени€...

1455 - | 1253 -


© 2015-2024 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.011 с.