Есть бут-сектор, который загружает есчё несколько секторов и передает управление. Написан на фасме. Сектора грузятся 100%. Последняя команда бут-сектора jmp 0x800:0x0, тобыш cs=0x800 и ip=0. По этому адресу загружены сектора. Режим процессора - реальный. Теперь проблема: передается правильно, но по адресу 800:0000 находится код: Код (Text): org 0x0 use16 jmp short Begin_l boot_devise db 0 boot_devise_logic db 0 Begin_l: mov bp,LOADER_START_MESSAGE mov ax,0x1301 mov bx,0x0F mov cx,LOADER_START_MESSAGE_SIZE mov dx,0203h int 0x10 jmp $ В этом варианте всё ОК, но если команду jmp short Begin_l сменить на jmp near Begin_l - работать отказывается(попадает не на метку а хз куда). Как такое может быть???
Помогите пожалуйста. Все длиные прыжки заканчиваются зависанием. А без них - как с руками, но не оттуда. Также не работают вызовы процедур. Блин, если я за сёдня не пойму в чём поблема - пойду в монахи! :"(
Не совсем понятно, что именно не работает: длинные прыжки/вызовы процедур? Почему бы не просмотреть, что генерирует FASM в самом файле с помощью шестнадцатеричного редактора/просмотрщика? Для этого неплохо было бы "обернуть" прыжки и вызовы командами 'nop' (код 0x90) для наглядности.
А почему org 0 ? бут всю жизнь был org 7c00h, потому near и не работает вследствие неправильного рассчёта смещения.
Бут сектор загружает есче несколько секторов по адресу 0х8000 и передает управу. Уже разобрался. Лажа была в компиляторе фасм 1.60.