В синтаксисе MASM директива SEGMENT
, за которой следует BYTE / WORD / PARA, указывает на выравнивание.Выравнивание говорит ассемблеру, что перед отправкой сегмента адрес должен быть округлен до ближайшей границы BYTE / WORD / PARA.Очевидно, что выравнивание BYTE не приведет к корректировке, поскольку каждый адрес памяти находится на границе байта.СЛОВО составляет 2 байта, а PARA - 16 байтов (размер PARAgraph)
Сегменты (по умолчанию) выводятся в том порядке, в котором они встречаются (это поведение может быть переопределено, но представленный код не делаеттакая модификация).
Счетчик стартовой программы, который нам дают, составляет 1000 часов.Учитывая первый раздел:
first SEGMENT BYTE
a db 7 dup (?)
first ENDS
Выравнивание BYTE
ничего не меняет, поэтому начальный адрес по-прежнему 1000h.Мы излучаем 7 байтов с db 7 dup (?)
от 1000 до 1006 часов (включительно).Счетчик программы после выдачи этого раздела равен 1007 ч (сразу после последнего выпущенного байта).Затем мы сталкиваемся со следующим разделом:
second SEGMENT WORD
b dw 200 dup (?)
second ENDS
Выравнивание WORD означает, что мы должны округлить до адреса, который делится равномерно на 2, прежде чем выдать раздел.1007h, округленное до следующей границы WORD, равно 1008h.1008h делится поровну на 2. Мы испускаем 200 16-битных слов с dw 200 dup (?)
на 400 байт.400 десятичных это 190 часов.Этот раздел будет охватывать диапазон от 1008 до 1197 часов включительно.Счетчик программы будет в 1198 ч.
third SEGMENT PARA
c db 3 dup (?)
d dw ?
third ENDS
PARA означает, что счетчик программы должен быть равномерно делим на 16 (десятичное число) до выдачи раздела.1198h уже не делится на 16 (десятичное число), поэтому оно требует корректировки.Следующий адрес, который делится на 16, это 11A0h (любое число, заканчивающееся шестнадцатеричной цифрой 0, делится на 16).Наш счетчик программ теперь 11A0h.3 байта передаются с db 3 dup (?)
и одно слово с dw ?
в общей сложности 5 байтов.Эти данные охватывают диапазон адресов 11A0h и 11A4h (включительно).Счетчик программы будет иметь значение 11A5h после отправки этого раздела.
Диапазон адресов ВСЕХ объединенных разделов будет от 1000h до 11A4h (включительно).