Теперь снова войдем в редактор и модифицируем программу та-
ким образом, чтобы она могла воспринимать какие-то данные из
внешней среды (этой "внешней средой" будете вы, а вводимые данные
будут набираться на клавиатуре). Измените программу следующим об-
разом:
.MODEL SMALL
.STACK 100h
.DATA
TimePrompt DB 'Eto vremya posle poludnya? (yes/no) - [y/n]$'
GoodMorningMessage DB 13,10,'Dobroe utro!',13,10,'$'
GoodAfternoonMessage DB 13,10,'Hello!',13,10,'$'
.CODE
.startup
mov ax,@Data
mov ds,ax; установить регистр DS таким
; образом, чтобы он указывал
; на сегмент данных
mov dx,OFFSET TimePrompt; ссылка на сообщение-запрос
mov ah,09h; функция DOS вывода строки
int 21h; получить ответ из одного
; символа
Begin:
mov ah,08h
int 21h
cmp al,'y'; указано время после полудня
; (буква Y)
jz IsAfternoon; да, время указано после
; полудня
cmp al,'n'; указано время после полудня
; (буква n)
jz IsMorning; нет, время указано до
; полудня
jmp Begin
IsAfternoon:
mov dl,'y'
mov ah,02h
int 21h
mov dx,OFFSET GoodAfternoonMessage; указывает на
; приветствие "Hello"
jmp DisplayGreeting
IsMorning:
mov dl,'n'
mov ah,02h
int 21h
mov dx,OFFSET GoodMorningMessage; указывает на
; приветствие "Dobroe utro"
|
|
DisplayGreeting:
mov ah,09h; функция DOS вывода сообщения
int 21h; вывести соответствующее
; сообщение
mov ah,4ch; функция DOS завершения
; программы
int 21h; завершить программу
ends
END
Таким образом, вы добавили в программу два очень важных новых
средства: возможность ввода и принятие решений. Эта программа
запрашивает у вас, является ли вводимое время временем после по-
лудня, воспринимая ответ (один символ) с клавиатуры. Если таким
ответом будет буква y, то программа выводит сообщение
"Hello!", если буква n, то выводится сообщение "Dobroe utro!".
В данной программе имеются все основные элементы полезной
программы: ввод информации из внешней среды, обработка данных и
принятие решения.
Сохраните эту модифицированную программу на диске. После
этого заново ассемблируйте и скомпонуйте программу, как в преды-
дущем примере. Запустите ее снова, введя hello в ответ на подс-
казку DOS. Выведется сообщение:
Eto vremya posle poludnya? (yes/no) - [y/n]
Курсор будет мерцать у последнего символа в ожидании ввода
ответа. Нажмите y. Программа ответит:
Hello!
Таким образом HELLO.ASM стала теперь интерактивной програм-
мой с принятием решений.
В ходе ассемблирования вы, конечно, получите различные сооб-
щения об ошибках из-за неправильного набора программы и ошибках в
синтаксисе. Турбо Ассемблер перехватывает такие ошибки, сообщая о
них. Выводимые сообщения об ошибках разбиваются на две категории:
предупреждения и ошибки. Если Турбо Ассемблер обнаруживает что-то
подозрительное, но необязательно неверное, он выводит предупреж-
дающее сообщение. Иногда предупреждающие сообщения можно игнори-
|
|
ровать, но всегда лучше их проверить и убедиться в том, что вы
понимаете суть проблемы. При обнаружении чего-либо явно непра-
вильного в вашей программе, что делает невозможным завершение ас-
семблирования и формирование объектного файла, Турбо Ассемблер
выводит сообщение об ошибке.
Другими словами, предупреждающие сообщения не свидетельству-
ют о критических ошибках, в то время как ошибки, о которых гово-
риться в сообщениях об ошибках, должны быть исправлены перед за-
пуском программы. В Приложении E содержится перечень сообщений об
ошибках и предупреждающих сообщений.
Как и любой язык программирования, Турбо Ассемблер не может
распознавать ошибки в логике программы. Турбо Ассемблер только
сообщает вам, может ли ваш ассемблируемый код быть выполнен в том
виде, как он введен, но он не может сделать вывод о том, будет ли
программа работать так, как вы этого хотите. Об этом можете су-
дить только вы сами.
Чтобы получить распечатку программы (вывести ее на устройс-
тво печати), обратитесь к руководству по редактору текстов. Ис-
ходные файлы Турбо Ассемблера представляют собой обычные тексто-
вые файлы в коде ASCII (американский стандартный код обмена
информацией), поэтому вы можете также напечатать исходный текст
программы на Ассемблере с помощью команды PRINT, введя ее в ответ
на подсказку операционной системы DOS.