Расскажем наконец, что представляет собой поле комментария.
Комментарии не выполняют никаких реальных действий в том смысле, что они не влияют на код выполняемого Турбо Ассемблером файла. Но это не означает, что они не являются существенными.
Вероятно, вы уже знаете, как программировать на языке высо-кого уровня (Си, Паскале, Прологе или другом), поскольку очень немногие начинают свое знакомство с программированием с Ассембле-ра. По мере знакомства с этим языком вы будете вновь и вновь встречаться с советами и рекомендациями по необходимости акку-ратной записи комментариев. Это прекрасный совет, так как и слож-ность, и время, прошедшее с момента ее написания, могут сделать программу совершенно непонятной даже для ее автора.
По сравнению с языком Ассемблера программа, например, на Паскале гораздо более наглядна. Программы Паскаля хорошо структу-рированы, он имеет жестко типизованные переменные, арифметические выражения, вызовы процедур и функций с формальными и фактическими параметрами.
Ассемблер же не имеет встроенных управляющих структур, жест-кой принудительной типизации данных, включающих переменные ариф-метических выражений и присущего ему механизма передачи парамет-ров. Короче говоря, код Ассемблера — это не тот хорошо структури-рованный и легко обслуживаемый текст, к которым вы, возможно, встречались. Поэтому, чтобы поднять Ассемблер до уровня естест-венного кодирования, вы должны широко пользоваться комментариями, а также подпрограммами и макрокомандами.
Имеется много способов включения в код Ассемблера коммента-риев. Один из наиболее полезных подходов состоит в том, чтобы слева от каждой инструкции помещать комментарий, в котором содер-жится ее краткое пояснение. Например, инструкция:
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
Вы наверное согласитесь с выводом, что если подпрограмма на-писана и отлажена (то есть правильно работает), то редко прихо-дится снова просматривать ее текст. Все, что вам потребуется уз-нать, — это какие функции выполняет подпрограмма, то есть, что происходит, когда вы ее вызываете, и как подпрограмма взаимодейс-твует с вызывающей ее программой. Этим целям довольно хорошо от-вечает приведенный в примере описательный заголовок (который иногда называют также «шапкой» программы).
Существует и много других методов комментирования, и вы, без сомнения, придумаете такой метод, который больше подходит для ва-шего стиля программирования. Важно только писать комментарии с самого начала, благодаря чему комментирование станет со временем неотъемлемой частью вашего стиля программирования.