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

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 ;Очистить 15 слов

LEA DI,NAMEDSP

REP STOSW

RET

F10CLNM ENDP

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

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

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

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

__________________________________________________________________________

Рис.11.2. Выравнивание вправо при выводе на экран.

ОСНОВНЫЕ ПОЛОЖЕНИЯ НА ПАМЯТЬ

________________________________________________________________

- Для цепочечных команд MOVS, STOS, CMPS и SCAS не забывайте

инициализировать регистр ES.

- Сбрасывайте (CLD) или устанавливайте (STD) флаг направления в

соответствии с направлением обработки.

- Не забывайте устанавливать в регистрах DI и SI необходимые

значения. Например, команда MOVS предполагает операнды DI,SI, а команда

CMPS - SI,DI.

- Инициализируйте регистр CX в соответствии с количеством байтов или

слов, участвующих в процессе обработки.

- Для обычной обработки используйте префикс REP для команд MOVS и

STOS и модифицированный префикс (REPE или REPNE) для команд CMPS и SCAS.

- Помните об обратной последовательности байтов в сравниваемых cловах

при выполнении команд CMPSW и SCASW.

- При обработке справа налево устанавливайте начальные адреса на

последний байт обрабатываемой области. Если, например, поле NAME1 имеет

длину 10 байтов, то для побайтовой обработки данных в этой области справа

налево начальный адрес, загружаемый командой LEA, должен быть NAME1+9. Для

обработки слов начальный адрес в этом случае - NAME1+8.

ВОПРОСЫ ДЛЯ САМОПРОВЕРКИ

________________________________________________________________

11.1. В данной главе приведены эквивалентные команды для а) movsb, б)

LODSB и в) STOSB с префиксом REP. Напишите эквивалентные команды для

обработки по словам а) MOVSW, б) LODSW и в) STOSW с префиксом REP.

11.2. Введите, ассемблируйте и выполните компоновку программы,

приведенной на рис.11.1. Не забудьте о инициализации регистра ES. Замените

команды MOVSB и MOVSW для пересылки справа налево. Измените процедуру

H10SCAS для сканирования поля NAME1 на слово "mb". Используя отладчик

DEBUG для трассировки процедур, обратите внимание на содержимое сегмента

данных и регистров.

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

DATASG SEGMENT PARA

CONAME DB 'SPACE EXPLORERS INC.'

PRLINE DB 20 DUP(' ')

Используя цепочечные команды, выполните:

а) пересылку данных из CONAME в PRLINE слева направо;

б) пересылку данных из CONAME в PRLINE справа налево;

в) загрузку третьего и четвертого байтов области CONAME в регистр AX;

г) сохранение содержимого регистра AX в область по адресу PRLINE+5;

д) сравнение данных в областях CONAME и PRLINE (они должны быть не

равны);

е) сканирование областей CONAME и PRLINE, и поиск в ней символа

пробел. Если символ будет найден, то переслать его в регистр BH.