LINUX.ORG.RU

В unix используется flat модель памяти, поэтому для кодла данных и стека используется один сегмент, как в ком программах под ДОС. ТОко этот сегмент 4 гига. Адреса это смещение относительно адреса 0000h этого сегмента.

OxiD ★★★★
()
Ответ на: комментарий от OxiD

А не в ДОСе, не в UNIX'e, не в Windows'e? Если просто так, без системы? Ведь BIOS определяет 64K на сегмент. Тут тогда от того сегмента смещение, где сеёчас программа? А как адресовать в СИ переменную в другой сегмент (опять-таки, без ОСи).

drish ★★
() автор топика
Ответ на: комментарий от grustnoe

Когда BIOS загружает код с первого сектора девайса, то на сегмент он отделяет 64K. Но что насчёт указателей?

drish ★★
() автор топика
Ответ на: комментарий от drish

ДА ПРИ ЧЕМ ТУТ БИОС????
То как интерпретируются указатели и модели памяти ни от оси ни от чего такого не зависят.
Процессор (IA32) может работать в двух режимах - реальном и зачищенном.
В реальном режиме сегментные регистры загружаюся 20 битным смещением
сегмента деленным на 16. В зачищенном там 32 битное смещение селектора ( некого указателя на на настоящий сегмент).
Это так сразу не обьяснишь 8))).
Вообщем - в реальном режиме регистры 16 разрячдные и можно адресовать грубо говря любой байт по адресу DS+pointer. Где DS - регистер с указателем на сегмент с данными, а pointer - 16 битное смещение в этом сегменте.

В зачищенном режиме ( в unix и windows) тебе нет дела до сегментных регистров (можно сделать и по другому, но тебе это пока не надо). Ты не можешь узнать значения в сегментном регистре, знаешь только что тебе доступно 4 гига памяти, соответствеено pointer становится 32 битным смещением от адреса сегмента...

Надеюсь ты хоть что-то понял, потому что я написал какую-то кашу. 8)
Поищи ключевые слова
"protected mode". И почитай книги Юрова или Зубкова. Вот.

OxiD ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.