Ассемблер и программирование для IBM PC



       

ГЛАВА 8. Экранные операции I: Основные свойства - часть 8


Ассемблер для IBM PC. Глава 8 179

действительную длину или отно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 ;Переслать два пробела INC SI ;Получить адрес INC SI ; следующего слова LOOP B30 ;10 циклов

Ассемблер для IBM PC. Глава 8 180

Команда MOV по метке B30 обозначает пересылку слова из двух пробелов по адресу, находящемуся в регистре SI. В последнем примеpе используется команда LEA для инициализации регистра SI и несколько иной способ в команде MOV по метке В30, так как нельзя закодировать, например, следующую команду:




Содержание  Назад  Вперед