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,'$'+ у меня данный пример не работает