Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler 01.doc
Скачиваний:
19
Добавлен:
09.11.2019
Размер:
727.04 Кб
Скачать

Команды обработки строк

МЕТОДИЧЕСКИЕ УКАЗАНИЯ:

1. Для выполнения лабораторной работы вы должны войти в каталог группы из панели NORTON. Каждый студент должен иметь в каталоге группы свой личный каталог. Все программы должны создаваться и записываться в личном каталоге студента.

2. Для обработки строковых данных ассемблер имеет пять команд обработки строк:

MOVS переслать один байт или одно слово из одной области памяти в другую;

LODS загрузить из памяти один байт в регистр AL или одно слово в регистр АХ;

STOS записать содержимое регистра AL или АХ в память;

CMPS сравнить содержимое двух областей памяти размером в один байт или в одно слово;

SCAS сравнить содержимое регистра AL или АХ с содержимым памяти.

3. Префикс REP позволяет командам обработки строк обрабатывать строки любой длины.

4. Команды обработки строк могут записываться по 3 вариантам:

а) Запись команд с операндами:

MOVS DI,SI

LODS AL,SI или AX,SI

STOS DI,AL или DI,AX

CMPS SI,DI

SCAS DI,AL или DI,AX

б) Запись команд без операндов для обработки одного байта:

MOVSB

LODSB

STOSB

CMPSB

SCASB

в) Запись команд без операндов для обработки одного слова:

MOVSW

LODSW

STOSW

CMPSW

SCASW

5. Команды обработки строк предполагают, что регистры DI и SI содержат относительные адреса, указывающие на необходимые области памяти. Регистр SI обычно связан с регистром сегмента данных - DS:SI. Регистр DI всегда связан с регистром дополнительного сегмента - ES:DI.

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

1. Rep: префикс повторения команды.

1.1. Запишите в текстовом редакторе NORTON следующую программу в СОМ-формате(rep.asm):

.286 TITLE REP (COM) CODESG SEGMENT PARA 'Code'

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

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

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

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

STRING1 DB 20 DUP('*')

STRING2 DB 20 DUP(' ')

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

MAIN PROC NEAR

CLD ;Сброс флага DF

MOV CX,20 ;Счетчик на 20 байт

LEA DI,STRING2 ;Адрес "куда"

LEA SI,STRING1 ;Адрес "откуда"

REP MOVSB ;Переслать данные

RET ;Вернуться в DOS

MAIN ENDP

CODESG ENDS

END BEGIN

Префикс REP обеспечивает повторение команды несколько раз. Для использования префикса REP необходимо установить начальное значение в регистре СХ. При выполнении цепочечной команды с префиксом REP происходит уменьшение на 1 значения в регистре СХ до нуля. Таким образом, можно обрабатывать строки любой длины.

Команда CLD устанавливает флаг DF в 0. Это обеспечивает направление пересылки данных из ячейки в ячейку слева направо. Для обеспечения пересылки данных справа налево необходимо использовать команду STD, устанавливающую флаг DF в 1, а в регистры DI и SI записать адреса STRING2+20 и STRING1+19 соответственно.

В программе осуществляется пересылка 20 байт из области памяти STRING1 в область памяти STRING2.

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

1.3. Вызвать отладчик DEBUG для выполнения программы. Просмотреть сегмент кодов командой отладчика D CS:100 и выполнить трассировку программы до команды RET. Повторить просмотр сегмента кодов командой D CS:100 , объяснить изменения произошедшие в сегменте кодов и записать выводы в отчет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]