Как вычисляется 20 битный адрес путем сложения 16 бит адреса сегмента с 16 бит смещением в процессорах Intel 8086?
Всё достаточно просто. У нас целый мегабайт памяти, нам надо 20 бит адреса, а регистры 16-битные.
Для того, чтобы можно было оптимально выделять память, разобьём её на блоки по 220-16 = 16 байт. Пронумеруем эти блоки, получим 16-битные номера.
Теперь для выделения фрагмента памяти мы можем взять номер первого выделяемого 16-байтного блока и количество блоков. Каждый такой выделенный фрагмент памяти назовём сегментом, а номер первого выделяемого блока - адресом сегмента. Внутри сегмента мы можем использовать 16-битную адресацию, что даёт размер сегмента в 64KB.
Но оперативная память ничего не знает о сегментах, ей нужен 20-битный адрес. Поэтому мы берём адрес сегмента, умножаем его на размер блока (16 байт) и прибавляем адрес внутри сегмента.
 То есть разные разные сегменты и разные офсеты совпадают. Путаница(Очевидно я где-то не догоняю). Да, избыточность, а не путаница. Если бы на сегмент отводилось 4 бита, то все сегменты были бы жёстко зафиксированы по сетке с шагом 64 КБ. А речь идёт о временах, когда 1 МБ был теоретическим (недостижимым на практике) максимумом. Часть адресного пространства отводится для разных устройств, и эта часть не обязательно идёт одним куском (устройства не знают друг о друге). Т.е. имеем в адресном пространстве "дыры", недоступные для ОЗУ. Чем больше шаг сетки, тем больше адресного пространства теряем. А чем меньше бит адресуют сегмент, тем больше шаг сетки.

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

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

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

Так что техническое решение для своего времени было хорошее.