From: Halil Demirezen (halil@bilmuh.ege.edu.tr)
Date: Mon 19 Aug 2002 - 16:46:25 EEST
Selam konularla alakali deil ama,
linux daki bootstrap kodunu inceledim ve bir kac tane daha kod inceledeim farkli
os larin bootstraplerini. anladigim kadariylar...
boot edilecek deviceden 512 byte olan bootstrap kodu okunuyor sonra bu
memory de 07c0h adresine yerlestiriliyor ve buraya jump edliyor..
ve buradaki codeler teker teker calisiyor. ornegin bo code yani bootstap
diskten biraz daha sector okuyup bunu farkli bir memory segmentine yerlestirip
buraya jump ediyor. Ben asagidakine benzer bir code yazdim...
code segment
mov ax,cs
mov ds,ax
mov es,ax
cli
mov ss,ax
mov sp, 400h
;gercek kod ile karistirmamk icin 512 byte inin uzerinde bir deger
sti
push es
mov ax, 3000h
mov es, ax
mov ah, 2
...
..
int 13h
pop es
boylece belirtigimiz sayida sector floppy veya hdiskten 3000h segment li adrese
atiliyor. diskten sector okuma veya jmp etme konusunda bir sorum yok fakat
bootstrap kodu icindeki bir offset degerli msg i ekrana bios interruplari ile yazdiramiyorum.
bios intlerini gectim , hadi screen buffer ile halledeyim dedim
push es
mov ax, 0b800h
mov es, ax
push di
mov di, 0
mov si, offset msg
dongu:
mov al, [si]
mov byte ptr es:[di], al
inc si
add di, 2
cmp al, 0
je cik
jmp dongu
pop di
pop es
bunu bile yapmiyor..
fakat
mov byte ptr es:[di], 'a'
yapinca problem yok yani a harfini yazdiriyor...
ama offseti gorsteremiyorum...
atladigim bir nokta mi var yoksa... ve bios int ler ile 80x25 a nasil sitring bastiracagim bootstrap icinde..
ek olarak assembler olarak masm kullaniyorum. Yoksa ms assemblerin bir problemimi yoksa???
yardimlarinizi bekliyorum...
iyi calismalr
---------------------------------------
This message was sent by Postaci Webmail. See www.trlinux.com for details.
-----------------------------------------------------------------------
Liste üyeliğiniz ile ilgili her türlü işlem için
http://liste.linux.org.tr adresindeki web arayüzünü kullanabilirsiniz.
Listeden çıkmak için: 'linux-request@linux.org.tr' adresine,
"Konu" kısmında "unsubscribe" yazan bir e-posta gönderiniz.
-----------------------------------------------------------------------