Символьные данные - Символьные константы

В гл. 6 мы познакомились с командами ассемблера DS и DC, предоставляющими возможность резервирования области памяти и присвоения ей символического имени. По команде DC, кроме того, в зарезервированную область можно записать какое-либо исходное значение. Память резервировалась полусловами, словами и двойными словами, чему соответствуют типы Н, F и D. Теперь рассмотрим возможность резервирования памяти байтами.

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

BYTES DS ЗЗС

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

DC-предложение используется для начальной загрузки зарезервированной области. Предложение

NONSENSE DC C'THE MOON IS PURPLE'

обеспечит резервирование 18 байтов, присвоение первому из них имени NONSENSE и запись в отведенное место следующей последовательности:

E3C8C540D4D6D6D540C9E240D7E4D9D7D3C5 Наиболее общей формой записи символьной константы является

DupCLn'cтpoкa'

где «Dup» — коэффициент кратности. Он обозначает количество требуемых областей типа CLn'стpoкa'. «Строка» представляет символьную строку. Ln означает «Длина в п байтов», где п — целое без знака. Если Ln не будет указано, ассемблером будет отведено минимальное поле, необходимое для записи указанной строки. В предыдущем примере параметр Ln был опущен, и для записи строки

THE MOON IS PURPLE

было отведено 18 байтов.

Если п больше, чем число символов в строке, то резервируется область в п байтов, в первые заносится указанный текст, а оставшиеся заполняются кодами пробела. Такие множества пробелов носят названия символов-заполнителей. Если же длина строки превышает п, то в память записываются лишь ее первые п символов, так как и в этом случае резервируется n-байтовая область памяти, а символы, не поместившиеся в нее, отбрасываются.

Например, предложение

EMPNO DC CL15'EMPLOYEE NO.'

вызовет резервирование 15-байтовой области, начинающейся байтом EMPNO. Эти 15 байтов будут содержать коды, соответствующие следующей строке:

EMPLOYEEbNO.bbb

к моменту начала выполнения программы. Поскольку требуется резервирование 15 байтов, а строка имеет лишь длину 12, оставшиеся 3 байта заполняются пробелами. По команде

EMPNO DC CL8'EMPLOYEE NO.'

в память, начиная с ячейки EMPNO, будет записана строка

EMPLOYEE

Последние 4 символа указанной строки были отброшены для того, чтобы оставшаяся часть уместилась в 8-байтовой области.

Коэффициент кратности используется тогда, когда нам нужно иметь несколько экземпляров исходной строки.

Например, по команде

REF DC 3CL8'REFUND'

в зарезервированную область памяти будет записана следующая информация:

REFUNDbbREFUNDbbREFUNDbb

Первый байт области получит имя REF.

Строки, предназначенные для вывода на печать, удобно засылать в зарезервированные ассемблером области, каждый байт которых содержит код пробела. Если строка имеет длину 133 символа, то предложение

LINE DC CL 133''

резервирует место, на которое впоследствии может быть помещена выводимая строка. Мы указываем строку, состоящую лишь из одного символа. Но поскольку запрашиваемая длина равна 133, в остальные 132 байта ассемблером будут занесены коды пробела.

Итак, команда DC используется для определения символьных (текстовых) констант. Ассемблер резервирует запрашиваемую область памяти и производит запись в нее кодов EBCDIC, составляющих указанную в команде строку. Если длина резервируемой области не задана, то она принимается равной числу символов в строке.



 
Оглавление
Символьные данные
Код EBCDIC
Символьные константы