Вопрос № 89861: Здравствуйте, уважаемые эксперты!
У меня такой короткий и глупый вопрос: "Почему адреса 1234:0005 и 1230:0045, и 1200:0345, и 1000:2345 указывают на одно и то же место в памяти?".
Заранее, спасибо!...
Вопрос № 89.861
Здравствуйте, уважаемые эксперты!
У меня такой короткий и глупый вопрос: "Почему адреса 1234:0005 и 1230:0045, и 1200:0345, и 1000:2345 указывают на одно и то же место в памяти?".
Заранее, спасибо!
Отправлен: 03.06.2007, 21:18
Вопрос задал: VSP (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: IceWolf
Здравствуйте, VSP!
Для начала разберемся как формируется линейный адрес:
сегмент*10h+смещение(сдвиг на 4 бита влево), т.е. для 1234:0005 1234*10+0005=12340+5=12345, теперь 1230:0045 -1230*10+45=12300+45=12345. В общем случае N*10+M=A, где N-сенмент, M-смещение, A-линейный адрес. Но (N-X)*10+(M+X*10)=N*10-X*10+M+X*10=N*10+M=A мы получили тот же результат. Дело все в том, что память не поделена жестко на сегменты. Память-просто большой непрерывный линейный массив, а сегментная адресация лишь способ указать на нужный байт в этом массиве(в конечном счете получаем 20 битный физический
адрес).(речь идет об адресации в реальном режиме).
Удачи!
--------- Идеальных защит не существует, ибо то, что создано человеческим разумом, им же будет и разрушено!
Ответ отправил: IceWolf (статус: 9-ый класс)
Ответ отправлен: 04.06.2007, 01:15 Оценка за ответ: 5 Комментарий оценки: Спасибо большое за исчерпывающий ответ
Отвечает: An42
Здравствуйте, VSP!
Вычислим физический адрес 1234:0005, адрес начала сегмента будет 1234h*10h=12340 и прибавим смещение 0005h
12340
+
0005
--------
12345
Аналогично вычислим остальные физические адреса:
1230h*10h+0045h=12345h,
1200h*10h+0345h=12345h
1000h*10h+2345h=12345h
Процессоры 086 имеют 16 разрядные регистры, но адресная шина имеет 20 разрядов, и чтобы сформировать 20 разрядный адрес, адрес регистра смещают на 4 бита в лево (умножают на 10h) и прибавляют к результату смещение.
По этому во всех случаях имея разные адресы начала сегмента и разные смещения в нутрии сегмента, получается один и тот же физический адрес.
Удачи
Ответ отправил: An42 (статус: 4-ый класс)
Ответ отправлен: 04.06.2007, 11:02