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

Ваш аккаунт

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

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

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

СПРАВОЧНИК по системе программирования ТУРБО АССЕМБЛЕР 2.0


Оглавление

                        Вывод символов на экран
-----------------------------------------------------------------

     Теперь, когда вы немного знаете о чтении и записи в програм-
ме,  давайте  напишем простую программу, которая выполняет просто
эхоотображение строки набранных на клавиатуре символов на экране.
Все  необходимые для этого функции DOS, кроме одной, вы уже знае-
те. Эта последняя функция необходима, поскольку у вас нет способа
завершить программу, когда она закончит выполнение.

     Те, кто знаком с языками Паскаль или Си, могут подумать, что
программа  на Ассемблере просто закончит работу, когда она дойдет
до конца основной программы. Но это не так. Чтобы завершить  свою
программу  на Ассемблере, вы должны выполнить явный вызов функции
DOS.

     Для завершения программы имеется несколько функций  DOS,  но
наиболее предпочтительным методом является выполнение функции DOS
с номером 4Ch (или 76 для тех, кто предпочитает десятичный  вид).
Зная это, можно теперь написать полную программу отображения сим-
волов:

   DOSSEG
   .MODEL SMALL
   .STACK 100h
   .DATA
   .CODE
EhcoLoop:
   mov    ah,1              ; функция DOS ввода с
                            ; клавиатуры
   int    21h               ; получить следующую клавишу
   cmp    al,13             ; это клавиша ENTER?
   jz     EchoDone          ; да, выполняем эхоотображение
   mov    dl,al             ; поместить символ в DL
   mov    ah,2              ; функция DOS вывода на экран
   int    21h               ; вывести на экран символ
   jnz    EchoLoop          ; отобразить следующий символ
EchoDone:
   mov    ah,4ch            ; функция DOS завершения
                            ; программы
   int    21h               ; завершить программу
   END

     Введите программу точно в таком виде и запустите ее. Вы уви-
дите, что каждый вводимый вами символ выведется дважды: один раз,
когда он отображается DOS при вводе с клавиатуры, и  второй  раз,
когда он отображается вашей программой. Важным моментом здесь яв-
ляется то, что все действия: считывания  символов  клавиш,  вывод
символов  на  экран  и завершение программы выполняются с помощью
функций DOS.


Базовая система ввода-вывода
-----------------------------------------------------------------

     Иногда функции DOS не  отвечают  вашим  потребностям.  Тогда
настал  момент обратиться к базовой системе ввода-вывода IBM PC -
BIOS. В отличие от DOS и прикладных программ BIOS не  загружается
с диска и не занимает место в 640К доступной памяти. Вместо этого
BIOS хранится в памяти, доступной только по чтению (ROM или ПЗУ),
в той части адресного пространства процессора 8086, которое заре-
зервировано для системных функций.

     BIOS является программным обеспечением IBM PC самого нижнего
уровня.  Даже  DOS  использует для управления аппаратурой функции
BIOS. Лучше использовать функции BIOS, чем управлять  аппаратными
средствами  непосредственно, поскольку, аналогично DOS, BIOS поз-
воляет "скрыть" различия между различными компьютерами и  устрой-
ствами.  С  другой  стороны,  там,  где это возможно, вам следует
пользоваться функциями DOS, а не функциями BIOS, поскольку  прог-
раммы,  использующие  BIOS, могут приводить к конфликту с другими
программами и в общем случае менее переносимы при работе на  раз-
ных ЭВМ.

                          Выбор режима экрана
-----------------------------------------------------------------

     Наиболее решающей причиной использования BIOS  является  уп-
равление  дисплеем,  так  как  DOS практически не предусматривает
поддержки широких возможностей дисплеев IBM PC. Только с  помощью
вызова  функций BIOS вы можете установить режим экрана, управлять
цветами, получить информацию о дисплейном адаптере и т.д.  Напри-
мер,  следующий код вызывает BIOS и устанавливает экран графичес-
кого адаптера CGA в четырехцветный графический режим:

                   .
                   .
                   .
                   mov   ah,0    ; функция BIOS установки
                                 ; режима
                   mov   al,4    ; номер режима для 4-цветной
                                 ; графики с разрешением 320х200
                   int   10h     ; выполнить видеопрерывание
                                 ; BIOS для установки режима
                   .
                   .
                   .

     Как вы наверное помните, мы уже  говорили  о  том,  что  для
установки видеорежима необходимо более 30 инструкций OUT.  Теперь
можно понять, что функция BIOS "Установить режим"  избавляет  вас
от большого объема работы.

     В BIOS предусмотрен также ряд функций, не связанных с управ-
лением дисплеем, включающих в себя обработку нажатий клавиш и уп-
равление диском. Однако в общем случае эти задачи лучше выполнять
с помощью функций DOS.

     Основным справочником по функциям BIOS является  "Справочное
руководство по интерфейсу с базовой системой ввода-вывода".



          Иногда необходимо обратиться к аппаратным средствам
-----------------------------------------------------------------

     Теперь, когда вы знакомы со всеми доводами в пользу  необхо-
димости  использования функций DOS (или, если это абсолютно необ-
ходимо, функций BIOS), пришло время  рассказать  о  тех  случаях,
когда можно посоветовать вам обратиться непосредственно к аппара-
туре. Например,  программное обеспечение  коммуникаций  управляет
последовательным портом IBM PC непосредственно с помощью инструк-
ций IN и OUT,  поскольку ни DOS, ни BIOS не предусматривают адек-
ватной  поддержки для последовательных коммуникаций.  Аналогично,
высокопроизводительная графика должна выполняться с  помощью  не-
посредственного  обращения к памяти дисплея,  так как DOS не под-
держивает графику, а BIOS делает это довольно медленно.

     Основным правилом при работе с аппаратными средствами  явля-
ется  уверенность  в том, что у вас нет другой альтернативы. Если
имеются функции DOS или BIOS, которые вы можете использовать,  то
используйте их. Если же нет, обращайтесь к аппаратуре непосредст-
венно. Кроме того, целью программирования является  создание  по-
лезных  программ,  а  не следование правилам. Другой стороны, чем
меньше правил вы нарушаете, чем с меньшим числом проблем вы  сто-
лкнетесь.


Другие ресурсы
-----------------------------------------------------------------

     Для программиста, работающего на Ассемблере, в IBM  PC  пре-
дусмотрены  также  другие программные и аппаратные ресурсы. Мы не
будем все их рассматривать, приведем только кратко  некоторые  из
них (подробности вы можете найти в справочных материалах):

     - драйвер ANSI.SYS, предусматривающий улучшенное  управление
дисплеем без необходимости обращения к функциям BIOS;

     - системные  таймеры  поддерживают  таймер  астрономического
времени,  а  также генерацию звука с помощью встроенного динамика
РС и точный отсчет времени;

     - дополнительный арифметический сопроцессор 8087 значительно
ускоряет выполнение операций с плавающей точкой.



       Глава 5. Основные элементы программы на языке Ассемблера
-----------------------------------------------------------------

     Теперь, когда вы поняли,  почему  язык  Ассемблера  является
уникальным, можно заняться деталями программирования на Ассембле-
ре.

     В этой главе вы узнаете об основных компонентах программы на
Ассемблере.  Сначала мы расскажем о минимальных требованиях к ра-
ботающей программе на Ассемблере. Затем мы обсудим различные эле-
менты  строки,  и как их можно сочетать друг с другом. Попутно мы
расскажем  много полезного об инструкциях,  директивах и тех спо-
собах,  с  помощью которых программа на Ассемблере может получить
доступ к памяти. Вы увидите, как в Турбо Ассемблере  определяются
и используются сегменты, узнаете о выделении и  использовании пе-
ременных в памяти. Наконец, мы рассмотрим некоторые наиболее  об-
щеупотребительные инструкции.

     Объем охваченных  здесь  тем велик,  но когда вы покончите с
этой главой, вы узнаете достаточно, чтобы начать писать программы
на  Ассемблере.  Реализовать это знание можно с помощью программы
подсчета слов, приведенной в конце главы.

     Так как в данной главе только затрагиваются  многие  аспекты
программирования  на  Ассемблере,  то в Главу 6 "Более подробно о
программировании на Турбо Ассемблере" и Главу 9  "Развитое  прог-
раммирование  на Турбо Ассемблере" где эти темы получают дальней-
шее развитие.

          Элементы и структура программы на языке Ассемблера
-----------------------------------------------------------------

     Теперь, когда вы лучше  понимаете,  что  представляет  собой
программа  на языке Ассемблера процессора 8086, вы готовы к тому,
чтобы начать писать на Ассемблере программы. Давайте  рассмотрим,
каковы минимальные требования к работающей программе на Ассембле-
ре. Даже простая программа на Ассемблере включает в себя  некото-
рое количество строк. Рассмотрим, например, следующую программу:

                   DOSSEG            ; директива упорядочивания
                                     ; сегментов
                   .MODEL   SMALL    ; модели кода и данных
                                     ; ближнего типа
                   .STACK   200h     ; стек объемом 512 байт
                   .DATA             ; начало сегмента данных
        DisplayString  DB  13,10     ; пара символов "возврат
                                     ; каретки/перевод строки"
                                     ; для начала новой строки
        ThreeChars     DB  3 DUP (?) ; память для трех символов,
                                     ; введенных с клавиатуры
                       DB  '$'       ; хвостовой символ "$",
                                     ; указывающий DOS, где
                                     ; завершить вывод строки
                                     ; DisplayString при
                                     ; выполнении функции 9
                    .CODE            ; начало сегмента кода
        Begin:
                    mov    ax,@Data
                    mov    ds,ax     ; DS указывает на сегмент
                                     ; данных
                    mov    bx,OFFSET ThreeChars ; указывает на
                                     ; ячейку памяти, где
                                     ; содержится первый символ
                    mov    ah,1      ; функция DOS ввода с
                                     ; клавиатуры
                    int    21h       ; получить следующую
                                     ; нажатую клавишу
                    dec    al        ; вычесть из символа 1
                    mov    [bx],al   ; сохранить измененный
                                     ; символ
                    inc    bx        ; указать на ячейку памяти,
                                     ; где содержится следующий
                                     ; символ
                    inc    21h       ; получить следующую
                                     ; нажатую клавишу
                    dec    al        ; вычесть из символа 1
                    mov    [bx],al   ; сохранить измененный
                                     ; символ
                    inc    bx        ; ссылка на ячейку памяти
                                     ; со следующим символом
                    int    21h       ; получить следующую
                                     ; нажатую клавишу
                    dec    al        ; вычесть из символа 1
                    mov    [bx],al   ; сохранить измененный
                                     ; символ
                    mov    dx,OFFSET DisplayString ; ссылка на
                                     ; строку измененных
                                     ; символов
                    mov    ah,9      ; функция DOS вывода строки
                    int    21h       ; вывести измененные символы
                    mov    ah,4ch    ; функция DOS завершения
                    int    21h       ; программы
                    END    Begin     ; директива, отмечающая
                                     ; конец исходного кода и
                                     ; указывающая, где начинать
                                     ; выполнение при запуске
                                     ; программы

     Данная программа  содержит  упрощенные директивы определения
сегментов DOSSEG, .MODEL, .STACK, .DATA и .CODE, а также директи-
ву END.  В каждой программе на Ассемблере, чтобы обеспечить опре-
деление сегментов и управление ими,  необходимы директивы опреде-
ления   сегментов   (упрощенные  или  стандартные),  а  завершать
программу на Ассемблере всегда должна  директива  END.  Директивы
определения  сегментов и директиву END,  а также некоторые другие
директивы мы опишем в данной главе.

     Директивы представляют собой только "рамки" программы на Ас-
семблере.  В  самой  программе  необходимы также строки исходного
кода, выполняющие какие-либо действия, например:

      mov [bx],al
и
      inc dx

     Эти строки представляют собой  мнемоники  инструкций,  соот-
ветствующие  набору  инструкций  процессора  8086, список которых
приведен в предыдущей главе. Однако, перед тем,  как  вы  сможете
использовать  инструкции  или директивы, вы должны изучить формат
строки кода Ассемблера, так что давайте рассмотрим его.

     Если вы захотите узнать,  что  же  делает  первая  программа
(приведенный в выше пример), введите ее, запустите, наберите IBM,
после чего программа ответит вам:

         HAL

     Программа считывает три символа, вычитает из каждого символа
значение 1 и выводит на экран результат.



Оглавление

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

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог