Я использую язык ассемблера 80x86.
DATA SEGMENT USE16 PARA PUBLIC 'DATA'
DAT DW 0AH
TMP DB 'WWWWW$' ;中间过程用
TGT DB 'WWWWW$' ;16位二进制数转换后至多为5位加上结束符‘$’
DATA ENDS
И что значит «общедоступные данные»?
Директива SEGMENT
может принимать две формы.:
name SEGMENT [attributes]
SEGMENT name [attributes]
В данном случае используется первый.
DATA
Это название сегмента
SEGMENT
Это первая форма директивы сегмента.
USE16
При использовании в объявлении сегмента кода определяет размер операнда по умолчанию.
При использовании в сегменте данных он ограничивает максимальный размер сегмента.
PARA
Выровнять по абзацам (16 байт).
PUBLIC
Этот сегмент будет объединен с другими сегментами с тем же именем за пределами модуля, чтобы сформировать один непрерывный сегмент.
'DATA'
Это класс сегмента. Он используется компоновщиком для упорядочения и группировки (объединения) сегментов во время компоновки. Каждый сегмент с одним и тем же классом группируется вместе, но возможна и другая группировка (например, данные и неинициализированные данные).
Что значит «Выровнять по абзацам (16 байт)». иметь в виду?
@ 昱文米 Это означает, что начальный адрес сегмента кратен 16. Когда сегменты объединены, между ними добавляется ноль байтов, чтобы последний сегмент начинался с числа, кратного 16. Начиная с числа, кратного 16, программист для доступа к началу сегмента с адресом вида: xxxx:0000
(как указал Питер). Это позволяет использовать один сегментный регистр для адресации всех данных, даже если их длина достигает 64 КБ.
PARA означает, что он выровнен по абзацам (16 байт), поэтому адрес seg:off может быть
xxxx:0000