OSDev
http://osdev.ru/

Определение размера памяти.
http://osdev.ru/viewtopic.php?f=6&t=422
Страница 1 из 1

Автор:  418ImATeapot [ 31 май 2011, 17:23 ]
Заголовок сообщения:  Определение размера памяти.

Руддщ, Цщкдв!

Хочу определить размер памяти через загрузчик в Unrealmode. Я знаю, что для этого есть какие-то функции BIOS, но они ведь нестандартные.

Нашел на wasm.ru пример и переделал его под свои нужды:
Код:
   memscan:;в FS Unreal-mode сегмент
     mov edx,10000h
     xor bx,bx
    .lop:
     mov byte al,[fs:edx]
     inc al
     mov byte [fs:edx],al
     mov byte ah,[fs:edx]
     cmp al,ah
     jne .hole
     dec al
     mov byte [fs:edx],al
     inc bx
    .hole:
     add edx,10000h
     and edx,edx
     jnz .lop
     mov word [ds:memsize],bx
     ret 

Проверяю в QEMU. Ставлю -m 16. Он мне выдает 17Ah. Полез напрямую в память, в BX - то же самое! Ставлю -m 8 - выдает 0FAh. То есть разница всегда 7Ah! Подскажите пожалуйста, это какие-то служебные участки?

Спасибо.

Автор:  SII [ 31 май 2011, 17:57 ]
Заголовок сообщения:  Re: Определение размера памяти.

Почитайте нашу вику, там про определение памяти написано.

Автор:  418ImATeapot [ 31 май 2011, 20:16 ]
Заголовок сообщения:  Re: Определение размера памяти.

В вике три правила и сто одно исключение :-(. Но в принципе это не важно. Скажите пожалуйста, а использовать эту лишнюю память не опасно? В смысле, не вызовет какую-нибудь гадость типа SMM после записи? (всякие ACPI пока подождут).
Спасибо.

Автор:  pavia [ 31 май 2011, 20:38 ]
Заголовок сообщения:  Re: Определение размера памяти.

Всё-таки совет использовать. Функцию E820h прерывания INT 15h
В вике описано.
Стандартов как вы заметили нет. Но есть спецификации принятые мировыми гигантами. И их можно считать стандартом.
Одной из таких спецификаций является ACPI и там эта функция описана.


Цитата:
Скажите пожалуйста, а использовать эту лишнюю память не опасно? В смысле, не вызовет какую-нибудь гадость типа SMM после записи?

На коком нибудь RD8600 если тупо тыкать можно попасть на SMM. А у нормальных разработчиков SMM лежит в теневой области под видео буфером 0A0000h-0BFFFFh

По поводу кода в 1 посте. Скорее всего вы попали на память устройств PCI или на порты PCI которые отображены в память.
В вике про это сказано. Поэтому такой метод не годится.

Автор:  418ImATeapot [ 31 май 2011, 20:52 ]
Заголовок сообщения:  Re: Определение размера памяти.

Спасибо, что наставили на путь истинный!

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/