Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11650
Последний выпуск: 19.06.2015

СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 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     ; описатель стандартного вывода

     Сделайте такое изменение, а затем снова выполните перекомпи-
ляцию  и  перекомпоновку  программы  перед  ее запуском. Запустив
программу, вы увидите, что сообщение появится на экране,  а  пос-
ледним символом будет графический символ перевода формата (кружок
с крестиком внизу). Этот символ программа  передает  на  принтер,
чтобы вынудить его после вывода сообщения выполнить перевод стра-
ницы. Поскольку на экране страниц нет, он ничего не знает о пере-
воде  формата и просто выводит на экран символ из набора символов
компьютера РС.


Оглавление

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
72K
22 мая 2011 года
Almasv2
0 / / 22.05.2011
Мне нравитсяМне не нравится
22 мая 2011, 12:26:54
И опять, вместо mov dx,ax в первой программе, надо mov ds,ax
2.
72K
22 мая 2011 года
Almasv2
0 / / 22.05.2011
Мне нравитсяМне не нравится
22 мая 2011, 12:13:32
Кстати, там после строк
mov ah,9 ; функция DOS вывода строки
int 21h ; получить ответ из одного
; символа
Здесь надо вставить функция считывания с клавиатуры: mov ah,1
int 21h
тогда будет работать
3.
24
04 ноября 2006 года
Zorkus
2.6K / / 04.11.2006
Мне нравитсяМне не нравится
12 ноября 2007, 18:51:33
Конечно не работает, там же после Здравствуйте указано 13.10, а надо - 13,10
4.
Аноним
Мне нравитсяМне не нравится
5 ноября 2005, 19:56:44
DB 13,10,'Здравствуйте!',13.10,'$'-ошибка-надо так DB 13,10,'Здравствуйте!',13,10,'$'+ у меня данный пример не работает
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог