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

Int 10h ;Вызвать bios

Возможен следующий дополнительный сервис:

0 - использовать атрибут и не перемещать курсор;

1 - использовать атрибут и переместить курсор;

2 - вывести символ, затем атрибут и не перемещать курсор;

3 - вывести символ, затем атрибут и переместить курсор.

ПРОГРАММА: МИГАНИЕ, ИНВЕРСИЯ И ПРОКРУТКА

________________________________________________________________

Программа, приведенная на рис. 9.1, принимает ввод имен с клавиатуры

и выводит их на экран. Запрос выдается в инвертированном отображении,

имена принимаются в нормальном отображении, а вывод имен осуществляется с

40 Столбца в той же строке с миганием и инвертированием:

Name? Francis Bacon Francis Bacon [мигание]

| |

Столбец 0 Столбец 40

Для управления положением курсора в программе определены переменные

ROW (вертикальное перемещение вниз) и COL (горизонтальное перемещение

вправо). Команда INT 10H не перемещает курсор автоматически. Программа

выводит имена сверху вниз, пока не достигнет 20-й строки. После этого

выполняется прокрутка экрана вверх на одну строку для каждого нового

запроса.

__________________________________________________________________________

page 60,132

TITLE NMSCROLL (EXE) Инвертирование, мигание, прокрутка

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

STACKSG SEGMENT PARA STACK 'Stack'

DW 32 DUP(?)

STACKSG SEGMENT PARA STACK 'Stack'

DW 32 DUP(?)

STACKG ENDS

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

DATASG SEGMENT PARA 'Data'

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

MAXNLEN DB 20 ; макс. длина имени

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

NAMEFLD DB 20 DUP(' ') ; имя

COL DB 00

COUNT DB ?

PROMPT DB 'Name? '

ROW DB 00

DATASG ENDS

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

CODESG SEGMENT PARA 'Code'

BEGIN PROC FAR

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

PUSH DS

SUB AX,AX

PUSH DS

MOV AX,DATASG

MOV ES,AX

MOV AX,0600H

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

A20LOOP:

MOV COL,00 ;Установить столбец 0

CALL Q20CURS

CALL B10PRMP ;Выдать текст запроса

CALL D10INPT ;Ввести имя с клавиатуры

CMP ACTNLEN,00 ;Нет имени? (т.е. конец)

JNE A30

MOV AX,0600H

CALL Q10CLR ;Если да, то очистить экран,

RET ; и завершить программу

A30:

CALL E10NAME ;Вывести имя на экран

JMP A20LOOP

BEGIN ENDP

; Вывод текста запроса:

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

B10PRMP PROC NEAR

LEA SI,PROMPT ;Адрес текста

MOV COUNT,05

B20:

MOV BL,70H ;Видеоинверсия

CALL F10DISP ;Подпрограмма вывода

Inc si ;Следующий символ в имени

Inc col ;Следующий столбец

CALL Q20CURS

DEC COUNT ;Уменьшение счетчика

JNZ B20 ;Повторить n раз

RET

B10PRMP ENDP

; вод имени с клавиатуры:

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

D10INPT PROC NEAR

MOV AN,0AH

LEA DX,NAMEPAR

INT 21H

RET

D10INPT ENDP

; Вывод имени с миганием и инверсией:

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

E10NAME PROC NEAR

LEA SI,NAMEFLD ;Адрес имени

MOV COL,40 ;Установить столбец

E20:

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

MOV BL,0FOH ;Мигание и инверсия

CALL F10DISP ;Подпрограмма вывода