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

Ваш аккаунт

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

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

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

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


Оглавление

                              Комментарии
-----------------------------------------------------------------

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

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

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

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

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

        mov   [bx],al   ; сохранить измененный символ

выглядит более понятной, чем инструкция

        mov   [bx],al

     Необязательно комментировать каждую строку.  Например,  ком-
ментарии типа:

        .
        .
        .
        mov   ah,1     ; функция DOS ввода с клавиатуры
        int   21h      ; вызвать DOS, чтобы получить
                       ; следующую нажатую клавишу
        .
        .
        .

не служат никакой полезной цели. Это, однако,  не  означает,  что
комментировать  такие строки не следует. Просто делайте коммента-
рии более короткими:

        .
        .
        .
        mov   ah,1
        int   21h    ; получить следующую клавишу
        .
        .
        .

     Нужно помнить о том, что целью комментариев является не объ-
яснение каждого элемента вашей программы, а облегчение анализа ее
текста и понимания (вами или кем-либо другим).

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

        .
        .
        .
;
; Сгенерировать для буфера передачи байт контрольной суммы
;
        mov   bx,OFFSET TransferBuffer
        mov   cx,TRANSFER_BUFFER_LENGTH
        sub   al,al   ; очистить аккумулятор контрольной суммы
CheckSum:
        add   al,[bx] ; добавить в него текущее значение байта
        inc   bx      ; указать на следующий байт
        .
        .
        .

     Обратите внимание, что мы не включаем комментарий  в  каждую
строку.  Из комментариев данного блока программы видно, что в ре-
гистр BX загружается адрес буфера передачи, а в CX - длина  буфе-
ра.  В комментарии к этому блоку из семи строк кратко суммируется
его работа, поэтому комментарии каждой  строки  становятся  менее
важными.  Если  кто-нибудь  будет  просматривать программу, то он
больше полезного извлечет из комментариев к блокам, чем  из  ком-
ментариев к строкам.

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

;
; Функция, возвращающая контрольную сумму (размером в
; байт) буфера данных
;
; Входные данные:
;           DS:BX - указатель на начало буфера
;           CX    - длина буфера
;
; Выходные данные:
;           AL    - контрольная сумма буфера
;
; Используемые регистры (содержимое не сохраняется):
;           BX, CX
;
; Примечание: буфер не должен превышать 64К и не должен
; пересекать границу сегментов.
;
CheckSum      PROC   NEAR
       sub   al,al         ; очистить аккумулятор
                           ; контрольной суммы
       add   al,[bx]       ; прибавить текущее
                           ; значение байта
       inc   bx            ; ссылка на следующее
                           ; значение
       loop  CheckSum
       ret
CheckSum      ENDP

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

     Существует и много других методов комментирования, и вы, без
сомнения, придумаете такой метод, который больше подходит для ва-
шего стиля программирования. Важно только  писать  комментарии  с
самого  начала, благодаря чему комментирование станет со временем
неотъемлемой частью вашего стиля программирования.


                    Директивы определения сегментов
-----------------------------------------------------------------

     И в данной главе, и в предыдущей, мы уже уделили много  вре-
мени для пояснения того, что собой представляют директивы опреде-
ления сегментов и как они влияют на составляемую вами  программу.
Однако,  имеется  еще  один момент, которого мы пока не касались.
Суть его в следующем: откуда Турбо Ассемблер в точности знает,  в
каком сегменте или сегментах находятся код и данные?

     Управление сегментами - это один из наиболее сложных  аспек-
тов программирования на языке Ассемблера для процессоров 8086. В
Турбо Ассемблере предусмотрен не один, а целых два набора дирек-
тив управления сегментами. Первый набор, состоящий из упрощенных
директив определения сегментов, делает управление сегментами от-
носительно легким и идеально подходит для компоновки модулей Ас-
семблера с языками высокого уровня, но поддерживает только неко-
торые из  сегментных  средств,  имеющихся  в  Турбо  Ассемблере.
Второй набор, состоящий из стандартных (полных) директив опреде-
ления сегментов, более сложно использовать, но он предусматрива-
ет  полное управление сегментами,  необходимое в некоторых прик-
ладных  программах   Ассемблера.   Далее   мы   рассмотрим   как
упрощенные,  так  и стандартные директивы определения сегментов.
Здесь же мы просто дадим обзор того,  как можно использовать ди-
рективы определения сегментов для составления ваших программ (их
полное описание содержится в Главе 9  "Развитое программирование
на Турбо Ассемблере").


Упрощенные директивы определения сегментов
-----------------------------------------------------------------

     Основными упрощенными директивами определения сегментов  яв-
ляются  директивы .STACK, .CODE, .DATA, .MODEL и DOSSEG. Рассмот-
рим эти директивы, разбив их на две группы. Первой  будет  группа
директив .STACK, .CODE и .DATA.




Оглавление

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

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