![]() 29 / 29 / 5
Регистрация: 06.01.2015
Сообщений: 326
|
|
Загрузчик. 07С0 - адрес в памяти - это смещение в байтах?10.10.2023, 11:54. Показов 1634. Ответов 15
Метки нет Все метки)
(
Код BIOS загружает 512 байт сектора MBR в память по адресу 07С0h.
В десятичной системе счисления 07с0 - это 1984. Правильно ли я понимаю разметку памяти в нулевом сегменте ? 0 <- - - - - - - - - - - - Memory - - - - - - - - -> N |...1984 байта|...512 байт кода загрузчика|...| Короче говоря, мне нужно знать сколько конкретно байт в памяти находится до границы 07c0, за которой идут 512 байт из MBR
0
|
10.10.2023, 11:54 | |
Ответы с готовыми решениями:
15
Пусть знаковое целое хранится в 2 байтах и начальный адрес массива находится в ячейке памяти 1002000 Какой объем (в байтах) имеет оперативная память компьютера, если FF – шестнадцатеричный адрес последнего байта оперативной памяти? |
Asm/C++/Delphi/Py/PHP/VBA
![]() |
|
10.10.2023, 18:56 | |
Память не считается секторами и никакой связи с секторами не имеет.
BIOS просто читает MBR по физическому адресу 7C00. Это может быть пара сегмент-смещение 7C0h:0 или 0:7C00h, что одно и то же, по сути.
2
|
![]() 29 / 29 / 5
Регистрация: 06.01.2015
Сообщений: 326
|
||||||
11.10.2023, 08:48 [ТС] | ||||||
Jin X, Argogo, а можно ли после загрузки ядра, зачистить всё до 7c00 и использовать на своё усмотрение, тогда будет доступна абсолютно вся память, нап если оперативки 512 МБ, то доступно будет ровно 512 МБ.
А то получается какой-то обман, ЭВМ, что-то в памяти разбивает на сегменты и тп без моего ведома, а я в надежде увидеть доступной всю память, получаю ограничения, красота ))) Вот всё что до 7с00 - оно резервируется что-ли? Так же читал, что есть какие-то зазоры в 16 бит между сегментами. Можно ли просто при загрузке сделать так, как будто никаких сегментов вообще не существует, чтобы была просто Память (плоская линейная память), а я уже сам разобью на нужные фрагменты. Какие-то сегменты данных, кода и тп, если можно просто указать адрес, где что-то хранится и обрабатывать через SI,SP, DI,DP диапазоны байтов А если данные из сегментов перекроются, нап избыток кода затерёт данные в сегменте данных? Какие-то трюки с записью в DS, нап
И ещё вопрос - можно ли задать размер страницы равным размеру сегмента в 64 КБ вместо 4 КБ или сделать равным нап 512 байт как сектор дискеты ?
0
|
634 / 398 / 72
Регистрация: 29.03.2013
Сообщений: 832
|
||||
11.10.2023, 10:53 | ||||
3
|
Модератор
|
|||||||||||
12.10.2023, 08:40 | |||||||||||
Доступные варианты организации виртуального адресного пространства определяются аппаратурой. Но Вы можете сделать свои "логические страницы", объединив заданные архитектурой аппаратной платформы, скажем, 4КБ (или 8КБ) страницы в удобные вам 64 КБ (или 128 КБ) блоки. И выделять страницы прикладным программам только порциями, кратными размеру "логической страницы". Если у Вас ретрокомпьютер без UEFI, можно сначала загрузить UEFI с дискеты, а потом из оболочки UEFI выполнить свою программу. При разработке прикладных программ для linux или windows на x64 можно обойтись без сегментных регистров.
2
|
Asm/C++/Delphi/Py/PHP/VBA
![]() |
|||||
12.10.2023, 13:27 | |||||
![]() РешениеДалее идёт область данных BIOS. Лучше зачищать после 0:7E00h (7C00h + 512) и до A000:0 (не включая его). ![]() Но! Если у вас 4ГБ памяти и больше, это не значит, что можно получить доступ ко первым 4ГБ памяти таким образом. Есть множество адресов, которые используются для отображения видеопамяти, ПЗУ, APIC, областей для "общения" с различными устройствами и т.д.
4
|
![]() 29 / 29 / 5
Регистрация: 06.01.2015
Сообщений: 326
|
|||
13.10.2023, 12:52 [ТС] | |||
БИОС что-то пишет по этим адресам и я, зачистив память первой строкой кода ядра, вот так: ![]() Получается ли так, что перед выполнением кода ядра, Память выше 7C00h уже что-то содержит без моего ведома и все биты не равны 0 -> грязный лист, память, так сказать ?
0
|
Asm/C++/Delphi/Py/PHP/VBA
![]() |
|
13.10.2023, 20:59 | |
Teamur, в некоторые области у вас не получится ничего записать. При записи в другие вы можете что-то сломать. И это не только после 0x7C00, но и до (например, при записи в таблицу векторов прерываний или в BDA – BIOS Data Area).
Пишите в физические адреса 0x7E00...0x7FFFF (480.5 КБ) и 0x100000...0xEFFFFF (14 МБ), там наиболее безопасно. Если нужно больше, тогда советую смотреть на доступную память через функцию E820. Всё, что помечено как "тип 1" можно юзать как хочется. В остальные области лучше не лезть.
2
|
Asm/C++/Delphi/Py/PHP/VBA
![]() |
|
14.10.2023, 14:22 | |
В принципе, если уж очень хочется, можно и адреса 0x500...0x7BFF использовать и даже 0x80000...0x9FFFF, т.е. по сути 0x500...0x9FFFF (638.75 КБ). Хотя во вторую часть вот тут не рекомендуют лезть, но на практике обычно эта область либо отсутствует, либо занимает буквально пару килобайт перед 0xA0000 (получить её сегмент можно через ah=C1h/int 15h; или прочитать слово из 0x40E).
2
|
![]() 29 / 29 / 5
Регистрация: 06.01.2015
Сообщений: 326
|
||
15.10.2023, 10:04 [ТС] | ||
Там можно разместить какие-то особые данные, служебные програмки, нужные ОС. Если можно использовать, надо использовать все ресурсы. В 638 килобайт можно и сетевой стек уместить. А если в дальнейшем, я собираюсь загружаться уже с жесткого диска, загрузчик нужно скопировать на него, и область выше 07C0 можно зачистить или BIOS всегда лезет по этому адресу, даже если загрузчик на жестком диске? Как вообще BIOS узнает, что загрузчик теперь на жестком диске, а не по адресу 07c0?
0
|
634 / 398 / 72
Регистрация: 29.03.2013
Сообщений: 832
|
||
15.10.2023, 11:01 | ||
2
|
![]() 29 / 29 / 5
Регистрация: 06.01.2015
Сообщений: 326
|
|
15.10.2023, 12:03 [ТС] | |
Argogo, я планирую сделать ОС, которая будет стоять на сервере. Хостинг поддерживает установку с образов (img, iso). На хостинге Qemu-KVM. Собираюсь использовать img-образ ( дискета )
Представляю процесс таким: 1) BIOS копирует код загрузчика из дискеты в память по 7c00 2) Загрузчик считывает код ядра из второго сектора дискеты 3) Код ядра запускает драйвер NVMe (жесткий диск), копирует на него код загрузчика, ядро и перезагружает систему 4) BIOS находит загрузчик на NVMe и затем что делает? - выполняет или копирует в память (7c00) ? 5) Ядро запускает NVMe драйвер, VirtioNET драйвер, стек UDP и слушает 6) Я дома какой-нибудь программой отправляю UDP-запросы на сервер 7) Сервер отвечает, я радуюсь Меня прежде всего сейчас интересуют процессы, связанные с нахождением оборудования, переключением состояния системы, состояние памяти, регистров, чтобы ничего не перекрывалось и не перетиралось без моего ведома, чтобы я мог гарантировано размещать данные в памяти, в регистрах без опасений. Знать какие инструкции и куда кладут результат. Что они делают за кулисами, помимо основного действия Например, условно, я кладу важные данные в регистр EAX, использую какую-нибудь инструкцию, где нет ссылок на EAX, а потом проверяю EAX, а там мои данные перетерлись - вот сюрприз - поэтому мне нужно знать какие команды пишут в EAX результат, где и что меняется. Я пишу веб-приложение, в котором можно будет видеть данные в регистрах, в памяти, на накопителях. В него также входит редактор кода. Разрабатываю свой Ассемблер, компилятор, изучаю кодирование инструкций (только начал) на бинарном уровне Через какое-то время надо будет создать отдельную тему, тк эта - уже не подходит ))) Собираюсь уместить свой сервер в 1 сегмент - 64 КБ
0
|
Модератор
|
|
16.10.2023, 09:47 | |
1
|
16.10.2023, 09:47 | |
Помогаю со студенческими работами здесь
16
Если элемент массива - четный, то вывести его адрес памяти, если нечетный, то адрес памяти следующего и предыдущего Как заменить загрузчик Windows Boot Manager на загрузчик Grub 2 FileManager или загрузчик Grub4Dos ? Размер памяти в байтах Определить объем памяти в байтах указанной структуры
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
![]() |
||||
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
|
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
|
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
|
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
|
Множества в Python
py-thonny 11.06.2025
В Python существует множество структур данных, но иногда я сталкиваюсь с задачами, где ни списки, ни словари не дают оптимального решения. Часто это происходит, когда мне нужно быстро проверять. . .
|
Работа с ccache/sccache в рамках C++
Loafer 11.06.2025
Утилиты ccache и sccache занимаются тем, что кешируют промежуточные результаты компиляции, таким образом ускоряя последующие компиляции проекта. Это означает, что если проект будет компилироваться. . .
|
Настройка MTProxy
Loafer 11.06.2025
Дополнительная информация к инструкции по настройке MTProxy:
Перед сборкой проекта необходимо добавить флаг -fcommon в конец переменной CFLAGS в Makefile.
Через crontab -e добавить задачу:
0 3. . .
|
Изучаем Docker: что это, как использовать и как это работает
Mr. Docker 10.06.2025
Суть Docker проста - это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнер, если говорить образно, это запечатанная коробка, в которой находится ваше приложение вместе. . .
|
Тип Record в C#
stackOverflow 10.06.2025
Многие годы я разрабатывал приложения на C#, используя классы для всего подряд - и мне это казалось естественным. Но со временем, особенно в крупных проектах, я стал замечать, что простые классы. . .
|
Разработка плагина для Minecraft
Javaican 09.06.2025
За годы существования Minecraft сформировалась сложная экосистема серверов. Оригинальный (ванильный) сервер не поддерживает плагины, поэтому сообщество разработало множество альтернатив. CraftBukkit. . .
|