Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
...И еще вопрос. 13.02.02 18:54 Число просмотров: 655
Автор: Chingachguk <Chingachguk> Статус: Member Отредактировано 13.02.02 18:56 Количество правок: 1
|
> Так на каком этапе проц генерит эксептион в примере > mov eax, 0 > mov [eax], 1 <<< Тута. > ?????
Вообще-то z0 все уже написал.
Просто хотел дополнить и спросить. Если посмотреть, как выполняется самая простая прога под вин, то вот что видать:
- код начинается ВСЕГДА с смещения 401000h.(возможно, это зависит от компилятора(я имею в виду +1000h));
- если выполнить инструкцию вида:
mov al,ds:[400000h] ; все работает OK
Но вот если выполнить эту:
mov al,ds:[400000h-1] ; То возникает исключение 0Eh - PageFault.
Итак, доступ куда нам дает селектор в ds. Смотрим:
ldt ds ; Выдать описалово на локальный дескриптор(в ds):
Sel ... Base Limit DPL Attr
0167 ... 0000 0000FFFF 3 P RW ED
Я полагаю, используется страничное преобразование линейного адреса.
В данном случае 400000h - это не минимальный физ. адрес, по которому можно читать/писать (это не так, ибо, например Base+Limit меньше+бит гранулярности вроде выставлен).
Пусть используются 4-х килобайтные страницы, тогда физический адрес формируется вроде так:
Биты 12-21 используются как индекс в таблице "базовых" физических адресов, оттуда берем базу, смещение берем(уже в ней) из битов 0-11, биты >=22 - индекс в каталоге страниц.
Я правильно понял ? Ж)
|
|
|