Недостаточно информации, чтобы ответить на вопрос.
Например:
а) если это "16-битная система", что это значит? Означает ли это, что все смещения сегментов являются 16-битными, или это означает, что целочисленные операции (сложение, вычитание, ...) являются 16-битными, но смещения адресации / сегмента используют совершенно другой размер?
b) Если смещения сегментов 16-битные, какова минимальная гранулярность? Например. если его адресуемый байт, то максимальный полезный размер сегмента не может быть намного больше 64 КБ (например, при доступе к 16-битному значению со смещением 0xFFFF вы сможете получить доступ к «64 КБ + один дополнительный байт»). Однако, если это «адресуемое слово», то, возможно, это больше похоже на «address = сегмент.base + смещение * word_size» и (с 16-битным размером слова) вы можете иметь «128 КиБ + один дополнительный байт».
в) Есть ли разница между «максимальным размером сегмента, который полезен» и «максимальным размером сегмента, который поддерживается»? Например, «64 КиБ + один дополнительный байт» может быть полезен в теории, но на практике вы ожидаете, что (для удобства / более быстрых проверок ограничения сегментов) ЦП вместо этого ограничит максимальный размер сегментов до 64 КиБ; но нечего сказать, что ЦП не использует абсолютно произвольный максимальный размер сегмента (16 КиБ, 32 КиБ, 12345 байт, 26 ГиБ, ....), который не имеет ничего общего с размером смещения сегмента.
d) Если расчет логического адреса равен «(сегмент.base + смещение * масштаб) & ((1 << max_bits) - 1)», где размер сегмента.базы неизвестен и может быть любым, размер смещение неизвестно и может быть чем угодно, масштаб неизвестен и может быть чем угодно, а max_bits неизвестно и может быть чем угодно; тогда невозможно определить размер логического адреса. Однако мы даже не знаем, что такое вычисление логического адреса (я просто выбрал «вероятную универсальную форму», где некоторые части могут быть отключены - например, как «scale = 1», если его байты адресуемы). </p>
e) Количество битов, необходимых для доступа к слову в сегменте, зависит от того, как вы их подсчитываете и что поддерживает ЦП. Например, может быть, есть специальная инструкция «извлечь 16 бит в начале подразумеваемого / сегмента данных по умолчанию», где вы можете получить доступ к слову (первому слову) сегмента без битов вообще. В другом примере, возможно, единственный режим адресации, поддерживаемый ЦП, включает использование двух 16-битных регистров (например, «address = сегмент.base + ((reg1 << 16) | reg2)», где вам нужно использовать 32 бита для доступа к слову . </p>