Комментарии


Расскажем наконец, что представляет собой поле комментария.

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

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

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

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

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

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

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

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