Теперь снова войдем в редактор и модифицируем программу таким образом, чтобы она могла воспринимать какието данные из внешней среды (этой «внешней средой» будете вы, а вводимые данные будут набираться на клавиатуре). Измените программу следующим образом:
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
TimePrompt DB ‘Это время после полудня? (ДА/НЕТ) [Y/N]$’
GoodMorningMessage LABEL BYTE
DB 13,10,’Доброе утро!’,13,10,’$’
GoodAfternoonMessage LABEL BYTE
DB 13,10,’Здравствуйте!’,13.10,’$’
.CODE
mov ax,@Data
mov dx,ax ; установить регистр DS таким
; образом, чтобы он указывал
; на сегмент данных
mov dx,OFFSET TimePrompt ; ссылка на сообщениезапрос
mov ah,9 ; функция DOS вывода строки
int 21h ; получить ответ из одного
; символа
cmp al,’Y’ ; указано время после полудня
; (прописная буква Y)
jz IsAfternoon ; да, время указано после
; полудня
cmp al,’y’ ; указано время после полудня
; (строчная буква y)
jnz IsMorning ; нет, время указано до
; полудня
IsAfternoon:
mov dx,OFFSET GoodAfternoonMessage ; указывает на
; приветствие “Здравствуйте” jmp DisplayGreeting IsMorning:
mov dx,OFFSET GoodMorningMessage ; указывает на
; приветствие «Доброе утро» DisplayGreeting:
mov ah,9 ; функция DOS вывода сообщения
int 21h ; вывести соответствующее
; сообщение
mov ah,4ch ; функция DOS завершения
; программы
int 21h ; завершить программу
END
Таким образом вы добавили в программу два очень важных новых средства: возможность ввода и принятие решений. Эта программа запрашивает у вас, является ли вводимое время временем после полудня, воспринимая ответ (один символ) с клавиатуры. Если таким ответом будет буква Y в верхнем или нижнем регистре (что означает ответ ДА), то программа выводит сообщение «Здравствуйте!», в противном случае выводится сообщение «Доброе утро!». В данной программе имеются все основные элементы полезной программы: ввод из информации внешней среды, обработка данных и принятие решения.
Сохраните эту модифицированную программу на диске. (При этом исходная версия файла HELLO.ASM заменится модифицированным кодом, поэтому старая версия будет потеряна.) После этого заново ассемблируйте и скомпонуйте программу, как в предыдущем примере. Запустите ее снова, введя hello в ответ на подсказку DOS. Выведется сообщение:
Это время после полудня? (ДА/НЕТ) [Y/N]
Курсор будет мерцать у последнего символа в ожидании ввода ответа. Нажмите Y. Программа ответит:
Здравствуйте!
Таким образом HELLO.ASM стала теперь интерактивной программой с принятием решений.
В ходе ассемблирования вы, конечно, получите различные сообщения об ошибках изза неправильного набора программы и ошибках в синтаксисе. Турбо Ассемблер перехватывает такие ошибки, сообщая о них. Выводимые сообщения об ошибках разбиваются на две категории: предупреждения и ошибки. Если Турбо Ассемблер обнаруживает чтото подозрительное, но необязательно неверное, он выводит предупреждающее сообщение. Иногда предупреждающие сообщения можно игнорировать, но всегда лучше их проверить и убедиться в том, что вы понимаете суть проблемы. При обнаружении чеголибо явно неправильного в вашей программе, что делает невозможным завершение ассемблирования и формирование объектного файла, Турбо Ассемблер выводит сообщение об ошибке.
Другими словами, предупреждающие сообщения не свидетельствуют о критических ошибках, в то время как ошибки, о которых говориться в сообщениях об ошибках, должны быть исправлены перед запуском программы. В Приложении E «Справочного руководства» содержится полный перечень сообщений об ошибках и предупреждающих сообщений.
Как и любой язык программирования, Турбо Ассемблер не может распознавать ошибки в логике программы. Турбо Ассемблер только сообщает вам, может ли ваш ассемблируемый код быть выполнен в том виде, как он введен, но он не может сделать вывод о том, будет ли программа работать так, как вы этого хотите. Об этом можете судить только вы сами.
Не беспокойтесь, если вы сейчас не совсем улавливаете смысл приведенной в примере программы на Ассемблере. Даже программистам, имеющим опыт работы на других языках, требуется некоторое время, чтобы освоиться с языком Ассемблера процессора 8086. Сейчас важно, чтобы вы просто получили представление о том, как выглядит программа на Ассемблере. Далее в этой главе и в главе «Основные элементы программы на языке Ассемблера» мы опишем каждый элемент представленной программы.
Чтобы получить распечатку программы (вывести ее на устройство печати), обратитесь к руководству по редактору текстов. Исходные файлы Турбо Ассемблера представляют собой обычные текстовые файлы в коде ASCII (американский стандартный код обмена информацией), поэтому вы можете также напечатать исходный текст программы на Ассемблере (на устройстве печати) с помощью команды PRINT, введя ее в ответ на подсказку операционной системы DOS.
