@SergeySerge11

Как вычисляется 20 битный адрес путем сложения 16 бит адреса сегмента с 16 бит смещением в процессорах Intel 8086?

main-qimg-73ea16dda4544fc7e18d253f4bae41b9
Что здесь ПРОИСХОДИТ?????? Почему это так странно, почему не складывают с 4 байтами, так как 16+4= 20 бит как раз
16 бит на 16 бит дают 32 бит комбинаций. А тут происходит какое-то Избыточное сложение с кучей пересечений.
К примеру Упростим до 4 бит,(в 4 раза уменьшим) 4+4=5
Для сегмента 0101 и адреса 0000 будет 010100
А для сегмента 0100 и адреса 0100 будет так же 010100 ???? То есть разные разные сегменты и разные офсеты совпадают. Путаница(Очевидно я где-то не догоняю).
То же самое и для 16 битных данных. По факту создается куча пересечений непонятных.
Почему не складываются 16 бит Сегмента с 4 битами смещения. Зачем там еще 12 бит лишних????
2 и еще. А какой адрес будет для смещения 2^16-1= 11111..111b и смещение большего 16? Получается 21 битное число, overflow ???
  • Вопрос задан
  • 359 просмотров
Решения вопроса 1
hint000
@hint000
у админа три руки
То есть разные разные сегменты и разные офсеты совпадают. Путаница(Очевидно я где-то не догоняю).
Да, избыточность, а не путаница. Если бы на сегмент отводилось 4 бита, то все сегменты были бы жёстко зафиксированы по сетке с шагом 64 КБ. А речь идёт о временах, когда 1 МБ был теоретическим (недостижимым на практике) максимумом. Часть адресного пространства отводится для разных устройств, и эта часть не обязательно идёт одним куском (устройства не знают друг о друге). Т.е. имеем в адресном пространстве "дыры", недоступные для ОЗУ. Чем больше шаг сетки, тем больше адресного пространства теряем. А чем меньше бит адресуют сегмент, тем больше шаг сетки.

Например, какое-то внутреннее устройство занимает в адресном пространстве всего 16 байт, но эта "дыра" не прилегает плотно к другим "дырам". При адресации сегмента по 4 битам мы бы потеряли сразу 64 КБ оперативки (физически она бы присутствовала, но была бы недоступна для адресации), а это очень много, это 1/16 от всего объёма в 1 МБ. Т.е. неоптимально распределённые адреса для всего лишь 16 устройств - и у вас не останется для ОЗУ вообще нисколько, ноль.

А с конфигурированием адресов ОЗУ и номеров IRQ на устройствах всё было очень сложно во времена до появления технологии PnP. От перемычек и переключателей на картах расширения или на материнских платах до ручных настроек в BIOS.

Избыточность в адресации сегментов позволяла очень сильно уменьшить геморрой от потерь адресного пространства. Да, ценой некоторого усложнения механизмов распределения памяти в OS, но пользователь и прикладной программист не наблюдал этих внутренних сложностей.

Так что техническое решение для своего времени было хорошее.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Всё достаточно просто. У нас целый мегабайт памяти, нам надо 20 бит адреса, а регистры 16-битные.
Для того, чтобы можно было оптимально выделять память, разобьём её на блоки по 220-16 = 16 байт. Пронумеруем эти блоки, получим 16-битные номера.
Теперь для выделения фрагмента памяти мы можем взять номер первого выделяемого 16-байтного блока и количество блоков. Каждый такой выделенный фрагмент памяти назовём сегментом, а номер первого выделяемого блока - адресом сегмента. Внутри сегмента мы можем использовать 16-битную адресацию, что даёт размер сегмента в 64KB.
Но оперативная память ничего не знает о сегментах, ей нужен 20-битный адрес. Поэтому мы берём адрес сегмента, умножаем его на размер блока (16 байт) и прибавляем адрес внутри сегмента.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Это проектировалось в 20-м веке. Тогда считалось что 1Мб памяти - это очень много. Вот и была сделана такая странная формула где любая комбинация сегмента + смещения всегда заворачивает вас в этот мегабайт.

Сегодня нет смысла изучать Intel 8086. Я не знаю что за преподаватель толкает вам такое старье. Это все равно что на уроках химии изучать философский камень или четыре стихии огонь-земля и так далее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы