Лекции.Орг


Поиск:




Категории:

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

 

 

 

 


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




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, объяснить изменения произошедшие в сегменте кодов и записать выводы в отчет.

 

5. Программа: выравнивание справа при выводе на экран.

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

.286

TITLE EXRING (COM) Выравнивание справа

CODESG SEGMENT PARA 'Code'

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

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

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

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

NAMEPAR LABEL BYTE;Имя списка параметров

MAXNLEN DB 31;Максимальная длина

ACTNLEN DB?;Число введенных символов

NAMEFLD DB 31 DUP(' ');Имя

PROMPT DB 'Name?','$'

NAMEDSP DB 31 DUP(' '),13,10,'$'

ROW DB 00

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

MAIN PROC NEAR;Основная процедура

MOV AX,0600H

CALL Q10SCR;Очистить экран

SUB DX,DX

CALL Q20CURS;Установить курсор в 0

A10LOOP:CALL B10INPT;Ввести имя

CALL F10CLNM;Очистить область имени

TEST ACTNLEN,0FFH;Нет имени? (т.е. конец)

JZ A90;Да - выйти

CALL D10SCAS;Найти звездочку

CMP AL,'*';Найдена?

JE A10LOOP;Да - обойти

CALL E10RGHT;Выровнять имя справа

CALL A10LOOP

A90: RET

MAIN ENDP

; Вывод запроса для ввода имени

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

B10INPT PROC

MOV AH,09

LEA DX,PROMPT;Выдать текст запроса

INT 21H

MOV AH,0AH

LEA DX,NAMEPAR

INT 21H

RET

B10INPT ENDP

; Поиск звездочки в имени

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

D10SCAS PROC

CLD

MOV AL,'*'

MOV CX,30;Длина сканирования 30

LEA DI,NAMEFLD

REPNE SCASB;Звездочка найдена?

JE D20;Да - выйти

MOV AL,20H;Нет - стереть * в AL

D20: RET

D10SCAS ENDP

; Выравнивание и вывод на экран

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

E10RGHT PROC

STD

SUB CH,CH

MOV CL,ACTNLEN;Длина в СХ для REP

LEA SI,NAMEFLD

ADD SI,CX;Вычислить правую позицию

DEC SI;введенного имени

LEA DI,NAMEDSP+30;Правая позиция поля имени

REP MOVSB;Переслать справа налево

MOV DH,ROW

MOV DL,48

CALL Q20CURS;Установить курсор

MOV AH,09

LEA DX,NAMEDSP;Выдать имя

INT 21H

CMP ROW,20;Последняя строка?

JAE E20

INC ROW;Нет - увеличить номер

JMP E90

E20: MOV AX,0601H;Да - прокрутить

CALL Q10SCR

MOV DH,ROW

MOV DL,00

CALL Q20CURS;Установить курсор

E90: RET

E10RGHT ENDP

; Очистить область памяти

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

F10CLNM PROC

CLD

MOV AX,2020H

MOV CX,15

LEA DI,NAMEDSP

REP STOSW;Очистить 15 слов

RET

F10CLNM ENDP

; Прокрутка экрана

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

Q10SCR PROC;АХ установлен при вызове

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

MOV CX,00

MOV DX,184FH

INT 10H

RET

Q10SCR ENDP

; Установить курсор

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

Q20CURS PROC;DX установлен при вызове

MOV AH,02

SUB BH,BH

INT 10H

RET

Q20CURS ENDP

CODESG ENDS

END BEGIN

 

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

B10INPT Принимает имена длиной до 30 символов.

D10SCAS Использует команду SCASB для сканирования имен и обхода любого ввода, содержащего символ *.

E10RGHT Использует команду MOVSB для выравнивания имен по правой границе, выводит имена в колонку в правой части экрана. Длина в поле ACTNLEN из списка параметров ввода используется для вычисления самого правого символа в имени.

F10CLNM Использует команду STOSW для очистки области имени в памяти.

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

5.3. Запустить программу из панели NORTON. Просмотреть работу программы. Выводы о работе программы записать в отчет.

СОДЕРЖАНИЕ ОТЧЕТА:

1. Листинги программ.

2. Выводы о работе программ.

КОНТРОЛЬНЫЕ ВОПРОСЫ:

1. Имеются следующие определения:





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


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


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

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

Неосмысленная жизнь не стоит того, чтобы жить. © Сократ
==> читать все изречения...

2285 - | 1991 -


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

Ген: 0.007 с.