![]() |
Загрузчик
Здравствуйте форумчане!
Помогите разобраться, необходимо загрузить программу в оперативную память при включении компьютера. Программа работает без операционной системы. Она должна загрузиться не в тот сегмент в который БИОС загрузит мой загрузчик, т.к. БИОС грузит загрузчик в нулевой сегмент по смещению 7C00h это где-то 32 кбайта, а моя программа 40кбайт поэтому в этот сегмент она не поместиться, загрузчик я написал. Вопрос как осуществить дальний прыжок в другой сегмент командой jmp что-бы передать управление моей программе, у меня что-то ничего не получается, и в какой сегмент загружать мою программу, повторяю программа работает без операционной системы, да забыл написать загружаюсь я с дискеты, загрузчик и п программа находятся на дискете. Привожу код загрузчика, там где вопросы непонятно что писать. ; zagr.asm - Загрузчик. Код:
cseg segment para 'code'Форумчане помогите пожалуйста, за помощь заранее благодарен. |
Interrupt List by Ralf Brown, скачай.
Код:
povtor1: |
Не про список прерываний я спрашивал, мне непонятно как осуществить дальний прыжок в другой сегмент и в какой сегмент грузить мою программу.
|
Цитата:
http://www.ctyme.com/intr/int-13.htm |
[B]Overbreak, спасибо что помогаешь. Я посмотрел эту страницу и в своей программе я записал далее в ah 2h тоесть прерывание 13 функчия 2 чтение с дискеты сектора далее для этой функции указал какие и сколько секторов читать, понял свою первую ошибку указал мало секторов, моя программа занимает больше.
У меня в начале загрузчика записывается в es адрес сектора вот какой сектор записать я и не знаю и как сделать дальний прыжок не знаю, то что написано на этой странице я знаю оно в загрузчике отражено вопрос не в этом. |
дальний прыжок всмысле jmp far/qword адрес
Прочти доки по файловой системе FAT*, здесь обсуждалось устройство дискеты http://wasm.ru/forum/viewtopic.php?id=26488 |
Да именно jmp far/dword
Я сделал так, косвенный дальний переход: jmp dword ptr [perex] perex dd 11170000h 1117 - сектор 0000 - смещение не знаю правильно или нет 0verbreaK если знаешь подскажи правильно так будет или нет. |
Загрузка сектора:
- получаем номер сектора dx:ax - преобразуем его к CSH (цилиндр, сектор, сторона) - используем прерывание BIOS int 13h Пишем свой загрузочный сектор http://www.cyberguru.ru/programming/assembler/assembler-boot-sector.html Код:
|
>> мне непонятно как осуществить дальний прыжок в другой сегмент
push _segment push _offset retf |
| Время: 23:32 |