 |
мы в приведенном выше примере, а затем снова выполните ассембли-
рование и компоновку.
Запуск вашей первой программы
-----------------------------------------------------------------
Теперь программу можно запустить на выполнение. Для этого в
ответ на подсказку операционной системы DOS введите hello и наж-
мите ENTER. На экран выведется сообщение:
Привет!
Пока это все. Вы только что создали и выполнили свою первую прог-
рамму на Ассемблере!.
Что происходит?
-----------------------------------------------------------------
Теперь, когда вы получили и выполнили программу HELLO.ASM,
давайте вернемся назад и рассмотрим подробно, что происходит с
момента ввода текста программы до ее выполнения.
Когда вы первый раз вводите исходный код программы на ассем-
блере, ее текст сохраняется текстовым редактором в памяти. Если
питание компьютера в этот момент по какой-то причине будет выклю-
чено, исходный код будет потерян, поэтому мы рекомендуем вам по-
чаще сохранять исходный код, чтобы избежать такой трагедии. После
того, как вы сохраните исходный код на диске, постоянная копия
текста будет записана в файл HELLO.ASM, который сохранится и пос-
ле выключения или сбоя питания (однако этот файл может быть поте-
рян в результате порчи диска, поэтому рекомендуется регулярно де-
лать резервные копии файлов). Файл HELLO.ASM - это стандартный
текcтовый файл в коде ASCII. Вы можете вывести его на экран, вве-
дя в ответ на подсказку DOS команду:
type hello.asm
Его можно также отредактировать с помощью текстового редактора.
Когда вы ассемблируете файл HELLO.ASM, Турбо Ассемблер прев-
ращает текст инструкций в этом файле в их двоичный эквивалент в
объектном файле HELLO.OBJ. Этот файл является промежуточным фай-
лом (промежуточным звеном в процессе перехода от текстового к вы-
полняемому файлу). Файл HELLO.OBJ содержит всю информацию, необ-
ходимую для создания выполняемого кода из инструкций, содержащих-
ся в файле HELLO.ASM, но она записана в виде, который позволяет
комбинировать ее с другими объектными файлами для создания одной
программы. В Главе 5 ("Более подробно о программировании на Турбо
Ассемблере") вы увидите, насколько полезным это может оказаться
при разработке больших программ.
При компоновке файла HELLO.OBJ утилита TLINK преобразует его
в выполняемый файл HELLO.EXE, который вы запускаете, введя hello
в ответ на подсказку DOS.
Теперь введите команду:
dir hello.*
При этом будет выведен список файлов HELLO на диске. Это будут
файлы HELLO.ASM, HELLO.OBJ, HELLO.EXE и HELLO.MAP.
Модификация вашей первой программы на Турбо Ассемблере
-----------------------------------------------------------------
Теперь снова войдем в редактор и модифицируем программу та-
ким образом, чтобы она могла воспринимать какие-то данные из
внешней среды (этой "внешней средой" будете вы, а вводимые данные
будут набираться на клавиатуре). Измените программу следующим об-
разом:
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.
Вывод информации на устройство печати
-----------------------------------------------------------------
Устройство печати (принтер) - это очень полезное устройство.
Вам может не только потребоваться распечатать текст программы, но
и передать на принтер выводимую информацию. Следующая версия
программы выводит информацию вместо экрана на принтер:
DOSSEG
.MODEL SMALL
.STACK 100h
.DATA
Message DB 'Привет!',13,10,'$'
Message_Length EQO $ - Message
|