Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Адреса. Где чё?

1.2K
15 августа 2006 года
piroman17
175 / / 20.07.2006
Вот видеопамять находится по адресу B8000h, а какие ещё области памяти заняты устройствами, BIOS'ом и прочим. Перерыл море инфы, нигде нет полной картины. Помогите пожалуйста!
--------------------------------
Да, кстати, а где кончается видеопамять?
551
15 августа 2006 года
Pavia
357 / / 22.04.2004
Смотри Ральфа Брауна. У него довольно таки полный список.

000000h-0003FFh- векторы прерываний.
000400h-0004FFh- облость переменных биоса.

0A0000h-0AFFFFh -Видео память под графические цветные режимы.
0B0000h-0B7FFFh -Видео память под монохромные символьные режимы
0B8000h-0BFFFFh -Видео память под цветные символьные режимы.

0C0000h-0DFFFFh -Биосы различных устройств
Чуть подробне
0C0000h–0C7FFFh -Биос видео карты 32Кб или 64Кб
0С8000h-различные- Биос жедсткого диска.

0E0000h-0FFFFFh - ROM BIOS

0C0000000-0FFFFFFFF -облость отводиться под различные устройства восновном PCI, видео карта это тоже PCI устройство. И др современные устройства.

А вобще в системе нет фиксированных диапазонов.
349
15 августа 2006 года
Phantom-84
656 / / 27.10.2005
Продвинутые оси (вроде моей : ) уже давно используют ACPI для определения доступных/резервных участков памяти...

Pavia, сейчас практически все BIOS используют под свои нужды небольшой участок памяти под границей 0A0000h (это называется дополнительной областью данных BIOS - extended BIOS data area)...
551
15 августа 2006 года
Pavia
357 / / 22.04.2004
А вот значит куда они еще 128Кб запяхнули, а я то думал где они. Я пока не оприделяю, когда полез в дебри ACPI ужастнулся там же написанно, что вверхних адрессах могут быть зарезервированные участки!!! А я то думал только первый мегобайт и четвертый ГБ. Вот теперь незнаю что делать, толи забить, толи как то обрабатывать.

DOS Application Area (00000h–9FFFh)
The DOS area is 640 KB in size, and it is further divided into two parts. The 512-KB area at 0 to
7FFFFh is always mapped to the system memory controlled by the MCH, while the 128-KB
address range from 080000 to 09FFFFh can be mapped to PCI_A or to system memory. By default
this range is mapped to system memory and can be declared as a system memory hole (accesses
forwarded to PCI_A) via MCH FDHC configuration register.
349
15 августа 2006 года
Phantom-84
656 / / 27.10.2005
[QUOTE=Pavia]А вот значит куда они еще 128Кб запяхнули, а я то думал где они. Я пока не оприделяю, когда полез в дебри ACPI ужастнулся там же написанно, что вверхних адрессах могут быть зарезервированные участки!!! А я то думал только первый мегобайт и четвертый ГБ. Вот теперь незнаю что делать, толи забить, толи как то обрабатывать.[/QUOTE]Нет, про 128 Кб - это другая история... Extended BDA обычно имеет размер в 1 Кб. По своей природе это обычная память...
1.2K
17 августа 2006 года
piroman17
175 / / 20.07.2006
Ещё вопрос:
Каким способом можно определить объём ФИЗИЧЕСКОЙ памяти.
334
17 августа 2006 года
HexEdit
809 / / 27.07.2006
В реальном режиме - INT 15h функция 88h
 
Код:
mov ah,  88h
        int 15h
;       на выходе - в AX количество расширенной памяти в килобайтах

А тебе в защищенном нада?
551
17 августа 2006 года
Pavia
357 / / 22.04.2004
К примеру, так используя прерывания:
http://subscribe.ru/archive/comp.soft.prog.asmos/200202/15170824.html
или так просто проверив возможноли считать данные из указанного диапазона:
http://www.wasm.ru/article.php?article=hardzen
А также можно воспользоваться DMI.
Также можно считать SPD блоки.
Или же пообщаться с контролером памяти, правдо тут я не уверен.
1.2K
17 августа 2006 года
piroman17
175 / / 20.07.2006
Именно в защищённом!
349
17 августа 2006 года
Phantom-84
656 / / 27.10.2005
В защищенном режиме обычно используют прямой доступ к памяти для проверки ее наличия, но это не профессионально, хотя я сам когда-то делал именно так. Повторяю еще раз, ОС должна определить все доступные участки памяти используя алгоритм, представленный в спецификации ACPI, и находясь при этом в реальном режиме! У кого используется пейджинг, реализация этого алгоритма будет сложнее, потому что нужно будет "обрезать" доступные участки памяти, выравнивая их по границе страницы, причем может случиться так, что какой-либо участок не будет содержать ни одной целой страницы. Также нужно выполнять детект на вхождение участка в общепринятые диапазоны (например, до 1 Мб), чтобы не было наложения свободных участков памяти на эти диапазоны, ну и т.д. и т.п.
17K
23 августа 2006 года
Yar4
15 / / 10.07.2006
Наверное, это все знают, но я узнал вчера. ROM BIOS дублируется также в самом конце адресного пространства. Кстати, слегка не в тему, как можно отладить(или хотя бы сэмулировать) начальную загрузку компа(до бут-сектора)? Какое начальное состояние регистров, в каком режиме находится процессор? Я знаю, что первая, выполняемая инструкцию находится по адресу 0xfffef или 0xffffffef(что одно и то же :) ), это переход, причем почему-то условный, почему?
8.5K
24 августа 2006 года
infernodiablo
73 / / 04.03.2006
[QUOTE=Phantom-84]Продвинутые оси (вроде моей : ) уже давно используют ACPI для определения доступных/резервных участков памяти...

Pavia, сейчас практически все BIOS используют под свои нужды небольшой участок памяти под границей 0A0000h (это называется дополнительной областью данных BIOS - extended BIOS data area)...[/QUOTE]
Может тогда дашь ссылочку на литературку про ACPI, был бы очень признателен! Кстати ты какую модель памяти выбрал в своей МЕГА-ОСи???
8.5K
24 августа 2006 года
infernodiablo
73 / / 04.03.2006
[QUOTE=Yar4]Наверное, это все знают, но я узнал вчера. ROM BIOS дублируется также в самом конце адресного пространства. Кстати, слегка не в тему, как можно отладить(или хотя бы сэмулировать) начальную загрузку компа(до бут-сектора)? Какое начальное состояние регистров, в каком режиме находится процессор? Я знаю, что первая, выполняемая инструкцию находится по адресу 0xfffef или 0xffffffef(что одно и то же :) ), это переход, причем почему-то условный, почему?[/QUOTE]
Может условный потому что: если проц работает нормально - то перейти туда-то, а если у него башня дымится то совсем в другое место??? :-)
252
24 августа 2006 года
koderAlex
1.4K / / 07.09.2005
[QUOTE=Yar4]Наверное, это все знают, но я узнал вчера. ROM BIOS дублируется также в самом конце адресного пространства. Кстати, слегка не в тему, как можно отладить(или хотя бы сэмулировать) начальную загрузку компа(до бут-сектора)? Какое начальное состояние регистров, в каком режиме находится процессор? Я знаю, что первая, выполняемая инструкцию находится по адресу 0xfffef или 0xffffffef(что одно и то же :) ), это переход, причем почему-то условный, почему?[/QUOTE]
Посмотри INT19 .Ночальное состояние регистров = 0 ( кроме IP ) .
Режим реальный .
349
24 августа 2006 года
Phantom-84
656 / / 27.10.2005
infernodiablo, вот ссылка: http://www.acpi.info
Используемую мной модель памяти лучше всего назвать смешанной, потому что в ней есть и элементы FLAT'а (прикладная часть процесса, локальные данные ядра/драйверов, глобальные данные ядра) и сегментное разделение нескольких адресных пространств (код ядра/драйверов, глобальные данные драйверов). И конечно все эти адресные пространства существуют поверх пейджинга.
17K
24 августа 2006 года
Yar4
15 / / 10.07.2006
Блин, ошибся, первая инструкция не по 0x(fff)fffef, а по 0x(fff)ffff0. Это обычный дальний прыжок реального режима, затем у меня ещё один переход, но уже короткий, а начальное состояние регистров, мне кажется не 0, по крайней мере биос(у меня) зачем-то в самом начале помешает dx в gs, затем проверяет какие-то порты и если там не то, что надо (я трассировал из под винды, поэтому, там было не то :) ), вешает проц. Дальше по тексту идёт запрет прерываний, установка стека, дальше проверяются порты, память ит.д.
17K
25 августа 2006 года
Yar4
15 / / 10.07.2006
В документации по i486 оказывается всё описано про начальную загрузку: eax=0, если с процессором всё хорошо, в dx серийный номер проца, режим реальный, остальные регистры не определены.
349
25 августа 2006 года
Phantom-84
656 / / 27.10.2005
...не серийный номер, а код типа, семейства и модели...
1.2K
25 ноября 2007 года
piroman17
175 / / 20.07.2006
Вот ещё вопросы в эту тему:
  • Как узнать (в процессе работы загрузчика) где находится например Биос видео карты? или там всегда стандартный адрес 0C0000h?
  • Как узнать предел памяти (всмысле физической)?
  • И ещё биос харда находтися по адресу 0С8000h, а где он кончается?
349
25 ноября 2007 года
Phantom-84
656 / / 27.10.2005
1. Адрес BIOS видеокарты, считай, стандартный.
2. По адресу и размеру последнего блока доступной памяти.
3. У каждого BIOS-юнита байт по смещению 2 определяет длину юнита в блоках по 512 байт. Иными словами, длину юнита, находящегося по адресу 0xC8000, можно узнать из ячейки по адресу 0xC8002, правда, сначала не помешало бы проверить предыдущие два байта на наличие сигнатуры 0xAA55. Кстати, я не уверен, что этот юнит обязательно должен относиться к жесткому диску.
1.2K
26 ноября 2007 года
piroman17
175 / / 20.07.2006
Цитата: Phantom-84

2. По адресу и размеру последнего блока доступной памяти.


2.У меня пишет адрес: FFFF0000h, размер 10000h, хотя пямяти у меня 1,25Гб.

Цитата: Phantom-84

3. У каждого BIOS-юнита байт по смещению 2 определяет длину юнита в блоках по 512 байт.... ...сначала не помешало бы проверить предыдущие два байта на наличие сигнатуры 0xAA55. Кстати, я не уверен, что этот юнит обязательно должен относиться к жесткому диску.


Как определить, какой юнит к чему относиться? А что будет обозначать значение 0xAA55 - в 0xC8000?

Где вообще про это можно почитать (желательно на русском)?

551
26 ноября 2007 года
Pavia
357 / / 22.04.2004
2. Int 15h функция E820h. Почитать можно в wiki.
Так же можно почитать в "PhoenixBIOS 4.0 Programmer’s Guide"
Только учти что в других биосах функция должна вызываться как
mov eax, 0E820h Просто некоторые проверяют по EAX, а некоторые по AX.

3. Начнем с того что в С8000h может и нележать ничего. А может и видео биос продолжаться.
AA55h это волшебные символы означающие присутствие BIOS.
Более подробно можно прочитать в спецификации PCI.
И еще чучуть в PnP.
349
26 ноября 2007 года
Phantom-84
656 / / 27.10.2005
Цитата:
2.У меня пишет адрес: FFFF0000h, размер 10000h, хотя пямяти у меня 1,25Гб.

Это не ОЗУ! Тип блока проверял?

Цитата:
Как определить, какой юнит к чему относиться?

Читай спецификацию PCI. А зачем тебе это нужно?

Цитата:
А что будет обозначать значение 0xAA55 - в 0xC8000?

Я же тебе написал, что это сигнатура, указывающая на присутствие юнита по данному адресу, хотя может случиться так, что это просто код внутри какого-то юнита, поэтому нужно выполнять анализ от начала диапазона 0xC0000-0xDFFFF. По длине первого юнита определить диапазон поиска второго, учитывая еще и то, что очередной юнит может начинаться только на 2-килобайтовой границе. Найдя второй юнит, искать за ним третий и т.д. Кстати Pavia прав, видео-BIOS часто занимает больше 32 Кб.

1.2K
26 ноября 2007 года
piroman17
175 / / 20.07.2006
Цитата:

Это не ОЗУ! Тип блока проверял?


:confused: результат работы int 15h 0E820h:
[FONT="Courier New"][начало] [размер] [тип] [атр]
000000000000 000000009F800 00000001 {не определился почему то}
00000009F800 0000000000800 00000002 {не определился почему то}
0000000DC000 0000000024000 00000002 {не определился почему то}
000000100000 000000FDF0000 00000001 {не определился почему то}
00000FEF0000 000000000F000 00000003 {не определился почему то}
00000FEFF000 0000000001000 00000004 {не определился почему то}
00000FF00000 0000000100000 00000001 {не определился почему то}
0000FEC00000 0000000010000 00000002 {не определился почему то}
00000FFFE000 0000000020000 00000002 {не определился почему то}[/FONT]

Всмысле "не ОЗУ"? А как посмотреть ОЗУ?

Цитата:

Более подробно можно прочитать в спецификации PCI


А где их можно скачать? Дай ссылочку!

И ещё, я вопрос изначально не совсем правильно поставил, мне нужно знать диапазоны адресов в которые нельзя записывать данные,код,стек,TSS и т.п. (чтоб всё нормально работало), например, 0B8000h-0BFFFFh (видеопамять). какие ещё диапазоны?

349
27 ноября 2007 года
Phantom-84
656 / / 27.10.2005
Если это вся таблица, то памяти всего 256 мег. При программном анализе я бы не стал считать за ОЗУ блоки типа 2, хотя конечно это не всегда так, взять хотябы блок 0x9F800+0x800, который имеет тип 2, но описывает ОЗУ.

Что касается последнего вопроса, то здесь все просто. Нет необходимости действовать методом исключения, т.к. BIOS сама сообщает в том числе и доступные для ОС участки памяти. Изначально для ОС доступны блоки типа 1, а после того, как ты извлечешь всю необходимую инфу из ACPI-таблиц, то и блоки типа 3. Лично я использую только блоки типа 1.
1.2K
28 ноября 2007 года
piroman17
175 / / 20.07.2006
Огромное спасибо! А вот почему 256? Я сам железо ставил и точно знаю что там 1,25 Гб...
1.2K
28 ноября 2007 года
piroman17
175 / / 20.07.2006
И ещё вопрос:
В первый диапазон (00000-9F800) входит кусок памяти 400h-4FFh(облость переменных биоса). Я так понимаю что туда ничего записывать нельзя, а какие ещё есть области памяти входящие в диапазоны типа 1, но в которых нельзя хранить данные/код/стек и т.п.
6.0K
29 ноября 2007 года
artyom-tyanutov
107 / / 10.07.2006
Цитата: Phantom-84
В защищенном режиме обычно используют прямой доступ к памяти для проверки ее наличия, но это не профессионально, хотя я сам когда-то делал именно так. Повторяю еще раз, ОС должна определить все доступные участки памяти используя алгоритм, представленный в спецификации ACPI, и находясь при этом в реальном режиме! У кого используется пейджинг, реализация этого алгоритма будет сложнее, потому что нужно будет "обрезать" доступные участки памяти, выравнивая их по границе страницы, причем может случиться так, что какой-либо участок не будет содержать ни одной целой страницы. Также нужно выполнять детект на вхождение участка в общепринятые диапазоны (например, до 1 Мб), чтобы не было наложения свободных участков памяти на эти диапазоны, ну и т.д. и т.п.



Phantom-84, не можешь ли прямо случаем дать может быть пару линков на доку по ACPI, а то я тоже ужаснулся прямо таки!

1.6K
29 ноября 2007 года
Vov4ick
476 / / 01.02.2007
Первая ссылка в гугле по запросу ACPI specification
349
30 ноября 2007 года
Phantom-84
656 / / 27.10.2005
Цитата:
А вот почему 256? Я сам железо ставил и точно знаю что там 1,25 Гб...

Видимо, имеется модуль в 1 гиг, который по каким-то причинам "не виден". Возможно, он поврежден или не симметричен/не совместим с другим.

Цитата:
В первый диапазон (00000-9F800) входит кусок памяти 400h-4FFh(облость переменных биоса). Я так понимаю что туда ничего записывать нельзя, а какие ещё есть области памяти входящие в диапазоны типа 1, но в которых нельзя хранить данные/код/стек и т.п.

На самом деле ОС защищенного режима может использовать в своих целях участок 0-0x4FF, но только после того как BIOS полностью перестает использоваться (нет сервисных запросов; не обрабатываются аппаратные прерывания; нет программ, которые подразумевают наличие определенных данных в этом участке памяти). Лично я не использую этот участок памяти для хранения собственных данных, а изменять его вполне допустимо, но только по определенным правилам. Кроме участка 0-0x4FF больше нет участков, которые принадлежали бы к блокам типа 1 и хоть как-то использовались. Участок EBDA под границей 640 Кб должен корректно отсекаться и в результате вызова сервисной функции int 15h/E820h и в результате вызова сервисной функции int 12h.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог