Размер стека, необходимый для вызова прерывания BIOS - PullRequest
5 голосов
/ 20 января 2010

Я работаю над небольшим загрузчиком в учебных целях. Есть ли какая-либо спецификация / информация о (свободном) размере стека, необходимом для вызова прерывания BIOS?

Ответы [ 4 ]

1 голос
/ 20 января 2010

перед входом в обработчик прерываний все регистры помещаются в стек вместе с адресом дальнего возврата, суммируют размеры ваших регистров и добавляют пространство, необходимое для хранения адреса возврата, чтобы получить минимальный размер стека.

обратите внимание, что вам потребуется больше места, если вы помещаете больше данных в стек, находясь в обработчике прерываний

0 голосов
/ 27 августа 2010

Простой ответ заключается в том, что для использования загрузочного сектора достаточно стека, используемого BIOS для выполнения вызовов прерывания (включая int 13h для загрузки загрузочного сектора с флэш-накопителя USB) перед загрузкой загрузочного сектора.

Удачный ответ заключается в том, что прерывания BIOS (за исключением нового раздутого PCI) предназначены для выполнения в минимальном пространстве, поэтому нет необходимости устанавливать стек в загрузочном секторе.

0 голосов
/ 26 февраля 2010

Я заметил, что если вы используете int 0x13 , у вас должен быть стек размером не менее 4096 байт. Современные BIOS часто имеют обработчик, совместимый с AHCI , int 0x13, и, поскольку AHCI довольно сложен, BIOS int 0x13 требует много места в стеке.

В идеальном мире BIOS должен иметь свой собственный стек, но многие BIOS полагаются на предоставленный вами стек.

0 голосов
/ 20 января 2010

Из http://www.o3one.org/hwdocs/bios_doc/pci_bios_21.pdf («Соглашения о вызовах» на стр. 3), похоже, что вызов BIOS может использовать до 1024 байтов стекового пространства. Мой поиск в Google не нашел никаких других источников.

...