Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 773
от 08.06.2007, 21:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 385, Экспертов: 36
В номере:Вопросов: 1, Ответов: 2


Вопрос № 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное