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

Int 10h ;Вызов bios

RET

Q10CLR

; Установка курсора (строка/столбец):

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

Q20CURS PROC NEAR ;DX уже установлен

MOV AH,02 ;Функция установки курсора

MOV BH,00 ;Страница #0

Int 10h ;Вызов bios

RET

Q20CURS ENDP

CODESG ENDS

END BEGIN

__________________________________________________________________________

Рис.8.2. Ввод и отображение имен.

Ввод единственного символа Return

-----------------------------------

При вводе имени, превышающего по длине максимальное значение,

указанное в списке параметров, возникает звуковой сигнал и система oжидает

ввода только символа Return. Если вообще не вводить имя, а только нажать

клавишу Return, то система примет ее и yстановит в списке параметров

нулевую длину следующим образом:

Список параметров (шест.): |14|00|0D|...

Для обозначения конца вводимых имен пользователь может просто нажать

Return в ответ на очередной запрос на ввод имени. Прогpамма определяет

конец ввода по нулевой длине.

Замена символа Return

-----------------------

Вводимые значения можно использовать для самых разных целей,

например: для печати сообщений, сохранения в таблице, записи на диск. При

этом, возможно, появится необходимость замены символа Return (шест.0D) в

области NAMEFLD на символ пробела (шест.20). Поле NAMELEN содержит

действительную длину или отноcительный адрес кода 0D. Если, например,

NAMELEN содержит длину 05, то адрес кода 0D равен NAMEFLD+5. Можно занести

эту длину в регистр BX для индексной адресации в поле NAMEFLD:

MOV BH,00 ;Установить в регистре BX

MOV BL,NAMELEN ; значение 0005

MOV NAMEFLD[BX],20H ;Заменить 0D на пробел

Третья команда MOV заносит символ пробела (шест.20) по адресу,

oпределенному первым операндом: адрес поля NAMEFLD плюс содержимое

регистра BX, т.е. NAMEFLD+5.

Очистка области ввода

-----------------------

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

остаются там, пока другие символы не заменят их. Рассмотрим следующие три

успешных ввода имен:

Ввод NAMEPAR (шест.)

1. Brown |14|05|42|52|4f|57|4e|0d|20|20|20| ... |20|

2. Hamilton |14|08|48|41|4d|49|4c|54|4f|4e|0d| ... |20|

3. Adams |14|05|41|44|41|4d|53|0d|4f|4e|0d| ... |20|

Имя HAMILTON заменяет более короткое имя BROWN. Но, так как имя ADAMS

короче имени HAMILTON, то оно заменяет только HAMIL. Код Return заменяет

символ T. Остальные буквы - ON oстаются после имени ADAMS. Для очистки

поля NAMEFLD до ввода очередного имени может служить следующая программа:

MOV CX,20 ;Установить 20 циклов

MOV SI,0000 ;Начальная позиция поля

B30:

MOV NAMEFLD[si],20H ;Переслать один пробел

Inc si ;Следующая позиция поля

LOOP B30 ;20 циклов

Вместо регистра SI можно использовать DI или BX. Более эффективный

способ очистки поля, предполагающий пересылку слова из двух пробелов,

требует только десять циклов. Однако, ввиду того что поле NAMEFLD

определено как DB (байтовое), необходимо изменить длину в команде

пересылки, посредством операнда WORD, a также воспользоваться операндом

PTR (указатель), как показано ниже:

MOV CX,10 ;Установить 10 циклов

LEA SI,NAMEFLD ;Начальный адрес

B30:

MOV WORD PTR[SI],2020H ;Переслать два пробела