|
|
|
|
Posted 2004-11-27, 11:42 PM
|
|
|
|
Code:
; 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
|
|
|
|
|
|
|
|
|
|
|