Каковы максимальные и минимальные размеры сегмента на 8086?

Каков минимальный и максимальный размер сегмента на 8086? И из-за минимума, какое максимальное количество отдельных сегментов мы можем иметь? нет необходимости, чтобы все были активны одновременно. (перекрытие приемлемо)

4 ответа

Сегментные регистры 8086 являются 16-битными, поэтому может быть 65536 сегментов, но они перекрываются. 20-битный физический адрес получается путем сдвига регистра сегмента влево на 4 бита и добавления смещения адреса. Это означает, что сегмент может начинаться с любого 16-байтового выравнивания. Из перекрытия следует, что существует много способов добавить одну ячейку памяти, например 0000:0010 а также 0001:0000 адрес в том же месте.

Поскольку смещение адреса также составляет 16 бит, адресуемый размер любого сегмента составляет 65536 байтов. Таким образом, максимальный размер сегмента составляет 65536 байтов, а наименьший - 16 байтов - хотя на 8086 весь сегмент может быть прочитан / записан без защиты.

Ваш последний вопрос "максимальное количество отдельных сегментов" составляет 16 отдельных сегментов. Больше и они будут пересекаться.

Максимальный размер каждого сегмента составляет 64 КБ, поскольку смещение составляет 16 бит, поэтому каждый сегмент имеет 2^16 байт = 64 КБ. минимальный размер сегмента - 16B.

В реальном режиме сегменты не имеют "размера": память не разделяется на сегменты в real mode, Сегмент является частью более крупного объекта: segment+offset - которые оба используются для расчета эффективного адреса. Это и сегмент, и смещение, которые позволяют процессору вычислять адрес байта памяти, а байт - это минимальная единица измерения, которую можно адресовать на платформе Intel. О "сегмент + смещение" программисты также говорят, что они составляют “far pointer”, Наоборот, “near pointer” является относительным указателем по сравнению с другим указателем, который имеет одинаковый сегмент. Таким образом, "дальний" указатель является указателем, состоящим из 16-разрядного селектора сегмента и 16-разрядного (или 32-разрядного, в зависимости от режима) смещения, поэтому общий размер дальнего указателя был 32-разрядным в 16-разрядном и 48-битный режим в 32-битном режиме. Селектор сегмента загружается в специальный регистр сегмента перед доступом к памяти из "дальнего" указателя. Есть специальные инструкции для загрузки дальнего указателя сразу. На Intel 8086Самые популярные инструкции были LDS а также LES, которые загружают "дальний" указатель из памяти на пару регистров: один сегментный регистр (DS или же ES) и один общий (смещенный) регистр. Есть также версии для других регистров: LFS, LGS а также LSS за FS, GS а также SS сегментные регистры соответственно (введены в Intel 80386). Сегменты чрезвычайно полезны в 16-битном режиме, будь то 16-битный реальный режим или 16-битный защищенный режим. В 16-битном реальном режиме значение регистров сегмента умножалось на 16, а затем добавлялось смещение - так рассчитывался эффективный адрес. Но, опять же, поскольку память в реальном режиме не была "сегментирована", не было ни минимального, ни максимального размера сегмента. В 16-битном реальном режиме, если вы загружаете FFFF в регистры DS и SI, вы можете теоретически получить доступ (16 * 0xFFFF) + FFFF = 1114096- й байт памяти (некоторые практические ограничения применяются, например, так называемые A20-line и т.д.) - или около 1 мегабайта.

Под 32-bit modeпочти нет необходимости в сегментных регистрах, поскольку все регистры сегментов по существу указывают на одни и те же местоположения, поэтому нет необходимости загружать регистры сегментов.

Под 64-bit modesЭти инструкции не реализованы, их код операции дал нарушения прав доступа. Со времени внедрения Intel VEX - "векторные расширения - (SSE2), Intel взяла свои коды операций LDS а также LES и начал использовать их для VEX префиксы. В результате 256-битный AVX (YMM) регистры доступны только в 64-битном режиме.

В protected modeсуществует такое понятие, как размер сегмента, но, опять же, минимальный размер отсутствует, или минимальный размер был минимальной единицей выделения архитектуры, например, 16 байт 16-bit mode или 4 килобайта в 32-bit mode, В защищенном режиме регистр сегмента содержит не значение, умноженное на 16, как в 16-битном реальном режиме, а индекс в таблице селекторов. С момента появления Intel 80286's protected mode, расширяет адресное пространство процессора примерно с 1 мегабайта до 224 байтов (16 мегабайт), но не за счет использования больших смещений. Вместо этого 16-битные регистры сегментов теперь содержат индекс в таблице дескрипторов сегментов, содержащих 24-битные базовые адреса, к которым добавляется смещение. Максимальный размер сегмента составил 64 килобайта. в Intel 80386 и в более поздних процессорах защищенный режим сохраняет механизм сегментации защищенного режима 80286, но модуль разбиения на страницы был добавлен в качестве второго уровня преобразования адресов между модулем сегментации и физической шиной. Кроме того, важно, что смещения адресов являются 32-разрядными (вместо 16-разрядных), а база сегмента в каждом дескрипторе сегмента также является 32-разрядной (вместо 24-разрядной). В результате максимальный размер сегмента был увеличен до теоретического максимума 4 ГБ. Интересно, что вопреки распространенному мнению, для 32-разрядных операционных систем не существует физического ограничения в 4 ГБ. Например, 32-разрядные серверные операционные системы, такие как 32-разрядная версия Microsoft Windows Server 2008, могут получить доступ к 64 ГБ (выпуски Windows Server 2008 Enterprise и Datacenter) - с помощью расширения физических адресов (PAE), которое впервые было представлено Intel в Pentium Pro, а затем AMD в процессоре Athlon - он определяет иерархию таблиц страниц из трех уровней с записями в таблице по 64 бита вместо 32, что позволяет этим ЦП напрямую обращаться к физическому адресному пространству размером более 4 гигабайт - так теоретически 32-разрядная ОС может получить теоретический доступ к 2^64 байтам или 17 179 869 184 гигабайтам, но сегмент ограничен 4 ГБ.

Максимальный размер 64K. Там нет минимума - вы можете использовать только первый байт, но сегмент всегда 64 КБ. Возможно, исключением являются последние сегменты - последний (0xFFFF) составляет 16 байтов, а последний - 32, 48, 64 байта... Обычно 8086 сегментов - это метод для адресации более 64 КБ с 16-битными адресными регистрами.

В микропроцессоре 8086 общая возможность адресации памяти составляет 1 МБ. Для представления 1 МБ требуется минимум 4 шестнадцатеричных числа, т.е. 20 бит. Микропроцессор 8086 имеет четырнадцать 16-битных регистров (т.е. нет регистров для представления 20-битного адреса). Таким образом, общая память может быть разделена на 16 отдельных логических сегментов, а емкость каждого сегмента составляет 64 КБ (т.е. 16 * 64 KB = 1MB).

Другие вопросы по тегам