fasm и дискета

Discussion in 'WASM.BEGINNERS' started by vorobei99, Feb 28, 2008.

  1. vorobei99

    vorobei99 New Member

    Blog Posts:
    0
    Joined:
    Feb 16, 2008
    Messages:
    25
    Location:
    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

    Blog Posts:
    0
    Joined:
    Jul 13, 2006
    Messages:
    319
    Location:
    Санкт-Петербург
    Code (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

    Blog Posts:
    0
    Joined:
    Jul 17, 2003
    Messages:
    1,537
    Location:
    Ukraine
    посмотри здесь примеры (boot sector examples)
     
  4. vorobei99

    vorobei99 New Member

    Blog Posts:
    0
    Joined:
    Feb 16, 2008
    Messages:
    25
    Location:
    Moscow
    Вот скажем я загрузился с дискеты , биос положил первый сектор по адресу 0000:07C00h и передал ему управления..Тоесть я имею в распоряжении 512 байт кода , они у меня выводят текстовую надпись и считывают в память 2 ой сектор дискеты по адресу 0000:7E000h как мне передать на этот адрес управление?Измениить значение регистра BP?
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Staff Member

    Blog Posts:
    2
    Joined:
    Jun 11, 2004
    Messages:
    3,568
    Location:
    Russia
    vorobei99
    А может CS:IP ?
     
  6. vorobei99

    vorobei99 New Member

    Blog Posts:
    0
    Joined:
    Feb 16, 2008
    Messages:
    25
    Location:
    Moscow
    Описался IP..просто у меня так что то не работает
     
  7. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
  8. vorobei99

    vorobei99 New Member

    Blog Posts:
    0
    Joined:
    Feb 16, 2008
    Messages:
    25
    Location:
    Moscow
    jmp же только с метками работает..а у меня на дискета программа и вразных секторах
     
  9. t00x

    t00x New Member

    Blog Posts:
    0
    Joined:
    Feb 15, 2007
    Messages:
    1,921
    разве можно дописать эти сектора в память за первым, или считать все сектора куда надо и jmp [ax].
     
  10. vorobei99

    vorobei99 New Member

    Blog Posts:
    0
    Joined:
    Feb 16, 2008
    Messages:
    25
    Location:
    Moscow
    Спасибо..Опробую всё
     
  11. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    не только.
     
  12. vorobei99

    vorobei99 New Member

    Blog Posts:
    0
    Joined:
    Feb 16, 2008
    Messages:
    25
    Location:
    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

    Blog Posts:
    0
    Joined:
    May 21, 2004
    Messages:
    507
    Location:
    Russia
    Что творится со стеком в процедуре read_track? ret там передаёт управление явно не туда, куда задумывалось (а на адрес, совпадающий со значением ds...)
     
  14. vorobei99

    vorobei99 New Member

    Blog Posts:
    0
    Joined:
    Feb 16, 2008
    Messages:
    25
    Location:
    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

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