Видимая часть регистра это всего лишь метка-заполнитель, а настоящим регистром, ответственный
За фактическое преобразование адресов, является теневой дескрипторный Любые действия над ним отражаются на выполнении любых преобразований адресов кода, стека или данных. В этом случае, в 16-битном защищенном режиме нужно использовать сегмент стека с «базовым адресом», соответствующим физическому адресу Oxf_oooo. Это не представляет проблем, так как Значение Oxf_ooooуже было загружено в поле базового адреса дескРип Горного кэша регистра ss В начале исполнения кода блока начальной заГрузки. Именно благодаря этому код, приведенный в листинге 4.3, и исполняется без всяких проблем. В листинге 4.5 показан еще один пример реализации макроса rom_call. Инструкция Retn По адресу Fooo:6036 В коде, приведенном в листинге 4.5, Должна Сработать В Конце исполнения F000_6000_write_pci_byte, Если регистровая пара Ss:sp Указывает на 0xf_61di. Так в действительности и происходит, потому что регистр Ss Содержит значение Oxfjdooo в поле базового адреса его дескрипторного кэша, а регистр Sp Содержит значение 6iDih. Таким образом, регистровая пара Ss:sp Указывает на физический адрес Еще одна интересная особенность кода BIOS — использование кэша процессора в качестве RAM. Кэш процессора используется как стек во время исполнения кода BIOS из чипа ROM BIOS, когда системная RAM еще недоступна. Обратите внимание, что RAM не станет доступной до тех пор, пока код начальной загрузки не убедится в ее физическом присутствии в системе. Таким образом, операции со стеком приходится выполнять обходным путем при помощи макроса Rom_call, Как было показано в предыдущем разделе.
Рубрика: Женский интерес