Как известно, после определения "железной" основы PC BIOS ищет загрузочное устройство и пытается загрузить самый первый сектор в память по адресу 0000:7C00. А почему именно по этому адресу? И что находится до него?
Так договорились Таблица векторов прерываний с 0 по 256*4-1 00000h-003FFh - таблица векторов прерываний 00400h-00501h - переменные БИОС'а
000000h-09FFFFh – Base Memory базовая память В нее входит 00000h-003FFh - таблица векторов прерываний 00400h-00501h - переменные БИОС'а TOP_ Base_Memory минус 1Кб EBDA(Расширения область переменных БИОСа) может и отсутствовать. И адрес лучше проверить, а не рассчитывать по данной формуле. INT 15 AH=0C1h в ES будет сегмент. Если ошибка будет поднят CF. Остальное в базовой памяти свободно. Вообще БИОС может откусывать часть базовой памяти. Вирусы тоже могут откусивать часть базовой памяти. В старых компьютерах размер базовой памяти был меньше 640 кб размер проверяется по адресу 413h-414h - Размер доступной памяти в килобайтах. Т.е Base Memory минус то что откушал БИОС, вирусы ОС, и прочие программы. Могли и не откушать. 000000h-09FFFFh – Base Memory базовая память 0A0000h-0BFFFFh – Video RAM, 128Кбайт видео память 0C0000h-0DFFFFh – ROM/RAM память различных адаптеров 0E0000h-0FFFFFh – System BIOS 128КБайт То что выше 1мб перечислять?
simpleX Вероятнее всего, из-за ограниченного объёма ОЗУ первых ПК: загрузка по такому адресу ограничивает минимальный объём ОЗУ величиной 32 килобайта. Pavia В современных компьютерах часть адресов в верхней части 640 Кб занята расширенной областью данных БИОС, поэтому по-прежнему необходимо сначала определить объём памяти, а потом уже использовать, а не предполагать, что всего 640 Кб доступны. Иначе БИОСу кирдык наступит.
+1 +1. Содержимое слова по физическому адресу 413h возвращается после вызова функции BIOS - int 12h. Проверять нужно обязательно. BIOS в EBDA может хранить все что угодно. Pavia, а что там в ячейке 501h?
Phantom_84 В PhoenixBIOS 4.0 Programmer’s Guide сказанно The BIOS Data Area is located from physical address 400h to 501h. 500h 1 byte Print screen flag У Ральфа Брауна --------B-M00500000-------------------------- MEM 0050h:0000h - PRINT-SCREEN STATUS Size: BYTE --------J-M00500001-------------------------- MEM 0050h:0001h - NEC PC-9800 series - SCREEN MODE Size: BYTE Note: if bit 3 set, the screen is in high-resolution mode (start memory at segment E000h instead of A000h) Остальные чсейки по адрессам 504h-5FFh отводятся под переменные доса. Так что их можно использовать на свое усмотрение. Бутсектор майкрософт при загрузке копирует себя по адрессу 600h (вернее 60h:0h)
Я думаю, что "PRINT-SCREEN STATUS" - это DOS'овская переменная. Во многих описаниях говорится, что BDA занимает ровно 256 байт.