fasm и дискета

Тема в разделе "WASM.BEGINNERS", создана пользователем vorobei99, 28 фев 2008.

  1. vorobei99

    vorobei99 New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2008
    Сообщения:
    25
    Адрес:
    Moscow
    Пишу ребят загрузчик, пока что он будет располагаться на дискете.В fasm формат binary делает автоматом образ.Форма моего загрузчика такая

    format binary
    use16

    jmp boot_code
    nop
    times 59 db 0ffh

    .......
    мой код
    .......

    times 510-$ db 00h
    db 055h,0aah

    Таким образом он сделает образ флопика на котором один сектор , который и считает биос.Как мне сделать чтобы он мне собрал еще код но уже в другие сектора флопика , чтобы я их потом считал в память и передал им управление?Чтобы не две дискеты использовать...можно ли это сделать средствами fasm?или же надо писать прогу которая их будет дописывать..
     
  2. 10110111

    10110111 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2006
    Сообщения:
    319
    Адрес:
    Санкт-Петербург
    Код (Text):
    1. format binary
    2. use16
    3.  
    4. jmp boot_code
    5. nop                    
    6. times 59 db 0ffh    
    7.  
    8. .......
    9. мой код
    10. .......
    11.  
    12. times 510-$ db 00h      
    13. db 055h,0aah          
    14. ;------------------------------------------
    15. ;next sector
    16. ;blah blah blah
    17. ;-------------------------------------------
    18. ;next sector
    19. ;etc.
     
  3. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    посмотри здесь примеры (boot sector examples)
     
  4. vorobei99

    vorobei99 New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2008
    Сообщения:
    25
    Адрес:
    Moscow
    Вот скажем я загрузился с дискеты , биос положил первый сектор по адресу 0000:07C00h и передал ему управления..Тоесть я имею в распоряжении 512 байт кода , они у меня выводят текстовую надпись и считывают в память 2 ой сектор дискеты по адресу 0000:7E000h как мне передать на этот адрес управление?Измениить значение регистра BP?
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    vorobei99
    А может CS:IP ?
     
  6. vorobei99

    vorobei99 New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2008
    Сообщения:
    25
    Адрес:
    Moscow
    Описался IP..просто у меня так что то не работает
     
  7. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
  8. vorobei99

    vorobei99 New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2008
    Сообщения:
    25
    Адрес:
    Moscow
    jmp же только с метками работает..а у меня на дискета программа и вразных секторах
     
  9. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    разве можно дописать эти сектора в память за первым, или считать все сектора куда надо и jmp [ax].
     
  10. vorobei99

    vorobei99 New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2008
    Сообщения:
    25
    Адрес:
    Moscow
    Спасибо..Опробую всё
     
  11. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    не только.
     
  12. vorobei99

    vorobei99 New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2008
    Сообщения:
    25
    Адрес:
    Moscow
    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

    Ребят в чем проблема все работает вроде нормально до джампа на адрес в памяти нового сектора
     
  13. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Что творится со стеком в процедуре read_track? ret там передаёт управление явно не туда, куда задумывалось (а на адрес, совпадающий со значением ds...)
     
  14. vorobei99

    vorobei99 New Member

    Публикаций:
    0
    Регистрация:
    16 фев 2008
    Сообщения:
    25
    Адрес:
    Moscow
    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

    Вот исправленное , но всеровно это не решило проблемы