Почему основная программа обычно начинается с адреса 0x8000?

Я не новичок в загрузчике и системном ПО, но я не знаю причины, по которой основная программа начинается с 0x8000. Я уже знаю, что адрес 0x8000использовался в качестве начального адреса в обычной программе C/C++.

Минимальный размер загрузчика для обычной программы составляет 0x8000? Или минимальный размер блока ПЗУ, который должен быть выделен для загрузчика 32КБ? Или есть другая причина?

Я хотел бы знать об этом, исторически или логически, и с точки зрения виртуального адреса.


Я ценю все, ваше время и помощь в этом. Чтобы сделать вопрос более ясным, вопрос связан с виртуальным адресом, а не с физическим.

Я в основном согласен с мнением R с точки зрения адреса физической памяти.

Не говоря уже о конкретной системе, которая отличается, например, linux (даже в android), общая RTOS (nucleus и другие, особенно раздел компоновщика ARM), все они используют адрес 0x8000 в качестве начального адреса общей программы. такие как crt_begin.o, crt.o и т. д., расположенные по адресу 0x0 с загрузчиком, существуют в этой области.

Поэтому я предполагаю, что минимальный размер загрузчика для общей программы составляет 32 КБ, учитывая размер блока, если он будет расположен в BootROM во время загрузки (холодная загрузка).

Эммм, но я не уверен...

43
задан casperOne 30 May 2012 в 12:54
поделиться