CodeNet / Языки программирования / Ассемблер / СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0
Модификация вашей первой программы на Турбо Ассемблере
-----------------------------------------------------------------
Теперь снова войдем в редактор и модифицируем программу та-
ким образом, чтобы она могла воспринимать какие-то данные из
внешней среды (этой "внешней средой" будете вы, а вводимые данные
будут набираться на клавиатуре). Измените программу следующим об-
разом:
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
.CODE
mov ax,@Data
mov dx,ax ; установить регистр DS таким
; образом, чтобы он указывал
mov ah,40h ; функция DOS вывода строки
; на устройство
mov bx,4 ; описатель принтера
mov cx,Message_Length ; число печатаемых символов
mov dx,OFFSET Message ; ссылка на "Привет!"
int 21h ; вывести "Привет!" принтер
mov ah,4ch ; функция DOS завершения
; программы
int 21h ; завершить программу
END
В данной версии программы функция DOS вывода строки на экран
заменена на функцию DOS, которая передает информацию на выбранное
устройство или в файл, в данном случае - на принтер. Введите и
запустите программу. Посмотрите, как она напечатает на принтере
слово "Привет!". (Перед запуском программы не забудьте ее сохра-
нить при завершении работы в редакторе. При этом программа будет
сохранена в файле HELLO.ASM, а предыдущая версия программы будет
потеряна.)
Вы можете модифицировать эту программу таким образом, чтобы
она снова посылала выходные данные на экран, а не на устройство
печати, заменив просто строку:
mov bx,4 ; описатель принтера
на строку:
mov bx,1 ; описатель стандартного вывода
Сделайте такое изменение, а затем снова выполните перекомпи-
ляцию и перекомпоновку программы перед ее запуском. Запустив
программу, вы увидите, что сообщение появится на экране, а пос-
ледним символом будет графический символ перевода формата (кружок
с крестиком внизу). Этот символ программа передает на принтер,
чтобы вынудить его после вывода сообщения выполнить перевод стра-
ницы. Поскольку на экране страниц нет, он ничего не знает о пере-
воде формата и просто выводит на экран символ из набора символов
компьютера РС.
Оставить комментарий
Комментарии
1.
+1 / -0


22 мая 2011, 12:26:54
И опять, вместо mov dx,ax в первой программе, надо mov ds,ax
2.


22 мая 2011, 12:13:32
Кстати, там после строк
mov ah,9 ; функция DOS вывода строки
int 21h ; получить ответ из одного
; символа
Здесь надо вставить функция считывания с клавиатуры: mov ah,1
int 21h
тогда будет работать
mov ah,9 ; функция DOS вывода строки
int 21h ; получить ответ из одного
; символа
Здесь надо вставить функция считывания с клавиатуры: mov ah,1
int 21h
тогда будет работать
3.


12 ноября 2007, 18:51:33
Конечно не работает, там же после Здравствуйте указано 13.10, а надо - 13,10
4.
+1 / -0


5 ноября 2005, 19:56:44
DB 13,10,'Здравствуйте!',13.10,'$'-ошибка-надо так DB 13,10,'Здравствуйте!',13,10,'$'+ у меня данный пример не работает
