[ glupi @ 24.12.2004. 21:09 ] @
Imam jedan problem koji vjerujem da nije kompliciran za rijesit ali meni predstavlja problem. Imam loader koji ide na prvi sektor diskete i koji ispise nesto i ucita kernel koji se isto nalazi na disketi iza loadera. On ljepo ucita taj kernel (dobro nije to kernel ali ce valjda postat jednog dana) i mogu iz njega ispisivat karaktere ali ne i stringove. Zasto i kako?
Probao sam i sa forom call pa pop adresu stringa ali isto nije htio ispisat string.


loader
Code:

[ORG 0]
jmp 07C0h:start

banner  db      '_______ Loader',13,10,0

start:
        mov ax, cs
        mov ds, ax
        mov es, ax

        mov si, banner
stat:
        lodsb

        cmp al, 0
        je reset_floppy

        mov ah, 0Eh
        mov bx, 7
        int 0x10

        jmp stat


reset_floppy:                     
        mov ax, 0          
        mov dl, 0           
        int 13h            
        jc reset_floppy            


read_floppy:
        mov ax, 1000h       
        mov es, ax          
        mov bx, 0           

        mov ah, 2           ; Load disk data to ES:BX
        mov al, 12          ; Load 5 sectors
        mov ch, 0           ; Cylinder=0
        mov cl, 2           ; Sector=2
        mov dh, 0           ; Head=0
        mov dl, 0           ; Drive=0
        int 13h             ; Read!
        jc read_floppy             

        mov ah,0eh
        mov al, 41h
        mov bx, 7
        int 0x10

        jmp 1000h:0000      ; Jump to the program


times 510-($-$$) db 0
dw 0AA55h



kernel
Code:


[ORG 0]

jmp main

s_mesg  db      'kernel v0.1 LOADED',13,0
s_help  db      'H - help',13,10,'R - reboot',13,10,0

main:
        mov si, s_mesg
        call prints
        mov si, s_help
        call prints
        jmp read

prints:
        lodsb

        cmp al, 0
        je read

        mov ah, 0Eh
        mov bx, 7
        int 0x10

        jmp prints
        ret

read:
        xor ah,ah ;u al slovo
        int 0x16

        cmp al, 48h
        call help
        cmp al, 52h
        jmp reboot

        call printc
        jmp read

help:
        mov si, s_help
        call prints
        ret

printc:
        mov ah, 0Eh
        mov bx, 7
        int 0x10
        ret

reboot:
        int 0x19
[ BaCkSpAcE @ 02.01.2005. 00:11 ] @
Greska je u tzv. kernelu:
Code:
 
read:
        xor ah,ah ;u al slovo
        int 0x16

        cmp al, 48h
        call help
        cmp al, 52h
        jmp reboot

        call printc
        jmp read


Ne mozes posle cmp da ides call, vec moras neki jump, ali sa nekim uslovom (je, jne, jz...)... U tvom slucaju bi najbolje bilo da umesto call help napises je help, ali bi onda morao i help da prepravis... posto ga vise ne pozivamo sa call, onda nam ne treba ret, vec umesto toga pisemo jmp read... To bi bilo to...
[ Sundance @ 04.01.2005. 00:17 ] @
http://www.elitesecurity.org/tema/83766