Пишу ребят загрузчик, пока что он будет располагаться на дискете.В fasm формат binary делает автоматом образ.Форма моего загрузчика такая format binary use16 jmp boot_code nop times 59 db 0ffh ....... мой код ....... times 510-$ db 00h db 055h,0aah Таким образом он сделает образ флопика на котором один сектор , который и считает биос.Как мне сделать чтобы он мне собрал еще код но уже в другие сектора флопика , чтобы я их потом считал в память и передал им управление?Чтобы не две дискеты использовать...можно ли это сделать средствами fasm?или же надо писать прогу которая их будет дописывать..
Код (Text): format binary use16 jmp boot_code nop times 59 db 0ffh ....... мой код ....... times 510-$ db 00h db 055h,0aah ;------------------------------------------ ;next sector ;blah blah blah ;------------------------------------------- ;next sector ;etc.
Вот скажем я загрузился с дискеты , биос положил первый сектор по адресу 0000:07C00h и передал ему управления..Тоесть я имею в распоряжении 512 байт кода , они у меня выводят текстовую надпись и считывают в память 2 ой сектор дискеты по адресу 0000:7E000h как мне передать на этот адрес управление?Измениить значение регистра BP?
format binary use16 jmp b_code ..... read_track: pusha push es push ds mov di,0x70 - адрес 2ого сектора mov es,di mov bx,0 mov cx,0x0002 mov dx,0x0000 mov ax,0x0201 int 0x13 ret b_code: .... floppy_init: mov ah,0x0 mov dl,0x0 int 0x13 jc floppy_init call read_track jnc kernel_boot ... kernel_boot: jmp 0x0070:0 - адрес считаного сектора times 510-$ db 00h db 055h,0aah sector2: mov ax,0xB800 mov es,ax mov word [es:30],0x0F64 hlt Ребят в чем проблема все работает вроде нормально до джампа на адрес в памяти нового сектора
Что творится со стеком в процедуре read_track? ret там передаёт управление явно не туда, куда задумывалось (а на адрес, совпадающий со значением ds...)
read_track: pusha push es push ds mov di,0x70 mov es,di mov bx,0 mov cx,0x0002 mov dx,0x0000 mov ax,0x0201 int 0x13 pop ds pop es popa ret Вот исправленное , но всеровно это не решило проблемы