Re[15]: Чтение данных из физической ячейки памяти
От: Hacker_Delphi Россия  
Дата: 21.01.03 04:06
Оценка:
Здравствуйте, vasketsov, Вы писали:

V>Здравствуйте, Hacker_Delphi, Вы писали:


V>[]


V>Так процессор же вроде сам эти 0xFFFF0000 подправит, или ругнется (собственно, так вроде бы сообщается о невыделенной физической памяти).

да нет там никакого выделения памяти... процессор тока пихает адрес в адресную шину и значение пишет/читает в шине данных, а выделением памяти занимается ОС...
V>В том смысле, что даже под досом нечто вроде mov 0xFFFF0000, 0 не приводит к записи в физическую память по адресу 0xFFFF0000. Потому о том, что 0xFFFF0000 — это именно физическая память (то есть, после трансляции адресов), я бы говорить не стал.
То под DOS'ом.
Еще раз описываю работу процессора:
[q]CS, DS — сами регистры, а [CS], [DS] — их Shadow части, то есть предзагруженые селекторы в процессоре (для ускорения работы используется...
итак.[list]
  • Произошел RESET (аппаратный сигнал на ногу процессора пришел) регистры:
  • процессор переключается в режим R-mode, но (!!!) внимательно читай значения Shadow регистров, по которым происходит реальная работа до первого перехода/изменения сегментного регистра.
    регистры:
    AX - 0 если Self test прошел успешно, не 0 (там есть свои коды) если была ошибка
    DX - DH - номер семейства процессора (4 - для 486) DL - версия ядра процессора (версия трафарета).
    IP - 0xFFF0 
    CS - 0xF000
    DS - 0x0000
    [CS] - 0xFFFF0000 (!!!)
    [DS] - 0x00000000 (!!!)

  • после первой же команды дальнего перехода/вызова регистр [CS] станет равен (CS << 4) как и должно быть в R-mode ...

    PS
    Я же тебе говорю: это — чтобы BIOS мог инициализироваться нормально, не пересекаясь с обычной памятью...
    например в процессорах 8086 это был бы физический адрес 0xFFFF0, а в 286 — 0xFFFFF0 и т.д. это — просто фича, аналогичная BOOT. вот и все.
    А то, что вякие BIOS мапятся на старшие адреса физической памяти — это факт... и то, что нонешние BIOS'ы умеют это разруливать — тоже факт... у меня вот щаз две видюхи..
    одна: по адресу 0xE0000000-0xE3FFFFFF (физические адреса на шине данных!!!) и 0x000A000-0x000AFFFF (это — та карточка, которая первой в BIOS стоит.
    вторая: 0xE9000000-0xE9FFFFFF и 0xD8000000-0xDFFFFFFF ...
    причем если оставить тока вторую — она гораздо меньше диапозонов займет, но зато займет и диапозон 0x000A000-0x000AFFFF ...
    Enigma — The Eyes of Truth (The Cross of Changes)
  • Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.