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

3. Сканирование и замена.

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

.286

TITLE SCAN (COM)

CODESG SEGMENT PARA 'Code'

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

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

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

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

STRLEN EQU 15

STRING DB 'The time&is now'

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

MAIN PROC NEAR

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

MOV AL,'&' ;Искомый символ

MOV CX,STRLEN ;Длина поля STRING

LEA DI,STRING ;Адрес поля STRING

REPNE SCASB ;Сканировать

JNZ K20 ;Символ найден?

DEC DI ;Да - уменьшить адрес

MOV BYTE PTR[DI],20H ;Подставить пробел

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

MAIN ENDP

CODESG ENDS

END BEGIN

В этой программе осуществляется сканирование строки STRING и замена символа & на символ пробела. Когда команда SCASB обнаружит символ &(в программе это будет позиция STRING+8), то операция сканирования прекратится и регистр DI будет содержать адрес STRING+9. Для получения адреса символа & необходимо уменьшить содержимое DI на единицу и записать по полученному адресу символ

пробела.

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

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

4. Дублирование образца.

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

.286

TITLE DUBL (COM)

CODESG SEGMENT PARA 'Code'

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

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

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

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

PATTERN DB '***___'

DISAREA DB 42 DUP(?)

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

MAIN PROC NEAR

CLD

MOV CX,21

LEA DI,DISAREA

LEA SI,PATTERN

REP MOVSW

RET

MAIN ENDP

CODESG ENDS

END BEGIN

В процессе выполнения команда MOVSW сначала пересылает первое слово (**) из образца PATTERN в первое слово области DISAREA, затем второе слово (*_) и третье (__). К этому моменту регистр DI будет содержать адрес DISAREA+6, а регистр SI - PATTERN+6. Затем команда MOVSW автоматически дублирует образец, пересылая первое слово из DISAREA в DISAREA+6, из DISAREA+2 в DISAREA+8, из DISAREA+4 в DISAREA+10 и т.д. до тех пор пока в регистре СХ не установится 0. В результате образец будет полностью продублирован по всей области DISAREA.

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

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

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