PDA

View Full Version : bootinit?


Demosthenes
2004-11-27, 10:42 PM
; This is a comment
[ORG 0x7C00];This just tells the program where it is in the memory. Not important
[BITS 16];Not important too.

jmp start ; Jump over BIOS parameter block

start:;The label for the start of the actual program

push cs;Put cs onto the stack
pop ds;Take it out and put it into ds


mov si,Print_loading ;Print loading message
call printstring ;Call is like jump, but it goes back. Like a function


;The complicated bit: Loads the next program
mov ah,02h ;When ah=, int13 reads a disk sector
mov al,4 ;Al is how many sectors to read
mov ch,0 ;The track to read from
mov cl,2 ;Sector Id
mov dh,0 ;Head
mov dl,0 ;Drive (0 is floppy)
mov bx,0x1000 ;Es and Bx put together are where to load the program too (see jmp 0x1000:0x00)
mov es,bx
mov bx,0x00
int 13h ;Int 13 is all functions for disks

mov si,putdot ;Print a ".".
call printstring

jmp 0x1000:0x00 ;Run Bootinit from stack.

printstring: ;Print string routine.
mov ah,0eh ;Mov ah into 0, so int 10 prints
stringloop: ;The following code loads each seperate charcter so it can be printed
lodsb
cmp al,00 ;If al =0, then the string has all been loaded
je endstring
int 10h ;When int 10 is called, and ah=, it prints
jmp stringloop
endstring:
ret ;Ret returns


putdot db '.',0
Print_loading db 13,10,'Loading Easy OS v0.01a...',0
times 425 db 0;wastes 425 bytes on purpose, so the sector is full (The program must be 512 bytes long)

I was looking at someone elses code, and right above printstring there is a jmp 0x1000:0x00. Why is it jumping there?

Here's the site: http://www.groovyweb.uklinux.net/index.php...your%20own%20os (http://www.groovyweb.uklinux.net/index.php?page_name=how%20to%20write%20your%20own% 20os)

Demosthenes
2004-11-28, 09:26 AM
; This is a comment
[ORG 0x7C00];This just tells the program where it is in the memory. Not important
[BITS 16];Not important too.

jmp start ; Jump over BIOS parameter block

start:;The label for the start of the actual program

push cs;Put cs onto the stack
pop ds;Take it out and put it into ds


mov si,Print_loading ;Print loading message
call printstring ;Call is like jump, but it goes back. Like a function


;The complicated bit: Loads the next program
mov ah,02h ;When ah=, int13 reads a disk sector
mov al,4 ;Al is how many sectors to read
mov ch,0 ;The track to read from
mov cl,2 ;Sector Id
mov dh,0 ;Head
mov dl,0 ;Drive (0 is floppy)
mov bx,0x1000 ;Es and Bx put together are where to load the program too (see jmp 0x1000:0x00)
mov es,bx
mov bx,0x00
int 13h ;Int 13 is all functions for disks

mov si,putdot ;Print a ".".
call printstring

jmp 0x1000:0x00 ;Run Bootinit from stack.

printstring: ;Print string routine.
mov ah,0eh ;Mov ah into 0, so int 10 prints
stringloop: ;The following code loads each seperate charcter so it can be printed
lodsb
cmp al,00 ;If al =0, then the string has all been loaded
je endstring
int 10h ;When int 10 is called, and ah=, it prints
jmp stringloop
endstring:
ret ;Ret returns


putdot db '.',0
Print_loading db 13,10,'Loading Easy OS v0.01a...',0
times 425 db 0;wastes 425 bytes on purpose, so the sector is full (The program must be 512 bytes long)

I was looking at someone elses code, and right above printstring there is a jmp 0x1000:0x00. Why is it jumping there?

Here's the site: http://www.groovyweb.uklinux.net/index.php...your%20own%20os (http://www.groovyweb.uklinux.net/index.php?page_name=how%20to%20write%20your%20own% 20os)

Never mind, I feel dumb for even asking. I got it figured out now.