boot.asm
==========================================================
[org 0]
jmp 07C0h:start
start:
mov ax, cs
mov ds, ax
mov es, ax
mov ax, 0xB800
mov es, ax
mov di, 0
mov ax, word [msgBack]
mov cx, 0x7FF
paint:
mov word [es:di], ax
add di,2
dec cx
jnz paint
read:
mov ax, 0x1000 ; ES:BX = 1000:0000
mov es, ax ;
mov bx, 0 ;
mov ah, 2 ; µð½ºÅ©¿¡ ÀÖ´Â µ¥ÀÌÅ͸¦ es:bx ÀÇ ÁÖ¼Ò·Î
mov al, 1 ; 1 ¼½Å͸¦ ÀÐÀ» °ÍÀÌ´Ù.
mov ch, 0 ; 0¹ø° Cylinder
mov cl, 2 ; 2¹ø° ¼½ÅͺÎÅÍ Àб⠽ÃÀÛÇÑ´Ù.
mov dh, 0 ; Head=0
mov dl, 0 ; Drive=0 A:µå¶óÀ̺ê
int 0x13 ; Read!
jc read ; ¿¡·¯°¡ ³ª¸é, ´Ù½Ã ÇÔ.
jmp 0x1000:0000 ; kernel.bin ÀÌ À§Ä¡ÇÑ °÷À¸·Î Á¡ÇÁÇÑ´Ù.
msgBack db '.', 0x67
times 510-($-$$) db 0
dw 0AA55h
kernel.asm
=========================================================
[org 0]
[bits 16]
start:
mov ax,cs ; CS ¿¡´Â 0x1000 ÀÌ µé¾î ÀÖ´Ù.
mov ds,ax
xor ax,ax
mov ss,ax
cli
lgdt[gdtr]
mov eax, cr0
or eax, 0x00000001
mov cr0, eax
jmp $+2
nop
nop
db 0x66
db 0x67
db 0xEA
dd PM_Start
dw SysCodeSelector
[bits 32]
PM_Start:
mov bx, SysDataSelector
mov ds, bx
mov es, bx
mov fs, bx
mov gs, bx
mov ss, bx
xor eax, eax
mov ax, VideoSelector
mov es, ax
mov edi, 80*2*10+2*10
lea esi, [ds:msgPMode]
call printf
jmp $
;-----------------------------------------;
;*************Sub Rutines*****************;
;-----------------------------------------;
printf:
push eax
printf_loop:
or al, al
jz printf_end
mov al, byte [esi]
mov byte [es:edi], al
inc edi
mov byte [es:edi], 0x06
inc esi
inc edi
jmp printf_loop
printf_end:
pop eax
ret
msgPMode db "We are in Protected Mode", 0
;------------------------------------------;
;*********** GDT Table ********************;
;------------------------------------------;
gdtr:
dw gdt_end - gdt - 1 ; GDTÀÇ limit
dd gdt+0x10000 ; GDTÀÇ º£À̽º ¾îµå·¹½º
gdt:
dw 0 ; limit 0~15 ºñÆ®
dw 0 ; º£À̽º¾îµå·¹½ºÀÇ ÇÏÀ§ µÎ ¹ÙÀÌÆ®
db 0 ; º£À̽º¾îµå·¹½º 16~23 ºñÆ®
db 0 ; ŸÀÔ
db 0 ; limit 16~19 ºñÆ®, Ç÷¡±×
db 0 ; º£À̽º¾îµå·¹½º 31~24 ºñÆ®
SysCodeSelector equ 0x08
dw 0xFFFF ; limit:0xFFFF
dw 0x0000 ; base 0~15 bit
db 0x01 ; base 16~23 bit
db 0x9A ; P:1, DPL:0, Code, non-conforming, readable
db 0xCF ; G:1, D:1, limit 16~19 bit:0xF
db 0x00 ; base 24~32 bit
SysDataSelector equ 0x10
dw 0xFFFF ; limit 0xFFFF
dw 0x0000 ; base 0~15 bit
db 0x01 ; base 16~23 bit
db 0x92 ; P:1, DPL:0, data, expand-up, writable
db 0xCF ; G:1, D:1, limit 16~19 bit:0xF
db 0x00 ; base 24~32 bit
VideoSelector equ 0x18
dw 0xFFFF ; limit 0xFFFF
dw 0x8000 ; base 0~15 bit
db 0x0B ; base 16~23 bit
db 0x92 ; P:1, DPL:0, data, expand-up, writable
db 0x40 ; G:0, D:1, limit 16~19 bit:0
db 0x00 ; base 24~32 bit
gdt_end:
ºÎÆ®·Îµå¿¡¼ Ä¿³ÎÀ» È£ÃâÇؼ We are in Protected ModeÀ» Ãâ·ÂÇϴ°ǵ¥¿ä
¹®Á¦´Â ÀÌ°ÍÀ» .img ¸¸µé¾î ºÎÆÃÇϸé We are in Protected ModeÀÌ Ãâ·ÂÀÌ ¾ÊµË´Ï´Ù.
±×·¡¼ µð½º¾î¼Àºí·¯¸¦ Çß½À´Ï´Ù. ±×·±µ¥ ¿µ ¸ð¸£°Ú³×¿ä.. ¾îµð ¹«ÇÑ·çÇÁ¿¡ ºüÁø°Í°°Àºµ¥
¿ä... ¾îµð°¡ À߸øµÇ¾ú´ÂÁö °¡¸£ÃÄÁÖ¼¼¿ä ¤Ð.¤Ð
00000000 EA0500C007 jmp word 0x7c0:0x5
00000005 8CC8 mov ax,cs
00000007 8ED8 mov ds,ax
00000009 8EC0 mov es,ax
0000000B B800B8 mov ax,0xb800
0000000E 8EC0 mov es,ax
00000010 BF0000 mov di,0x0
00000013 A14000 mov ax,[0x40]
00000016 B9FF07 mov cx,0x7ff
00000019 268905 mov [es:di],ax
0000001C 81C70200 add di,0x2
00000020 49 dec cx
00000021 75F6 jnz 0x19
00000023 B80010 mov ax,0x1000
00000026 8EC0 mov es,ax
00000028 BB0000 mov bx,0x0
0000002B B402 mov ah,0x2
0000002D B001 mov al,0x1
0000002F B500 mov ch,0x0
00000031 B102 mov cl,0x2
00000033 B600 mov dh,0x0
00000035 B200 mov dl,0x0
00000037 CD13 int 0x13
00000039 72E8 jc 0x23
0000003B EA00000010 jmp word 0x1000:0x0
00000040 2E670000 add [cs:eax],al
00000044 0000 add [bx+si],al
00000046 0000 add [bx+si],al
00000048 0000 add [bx+si],al
0000004A 0000 add [bx+si],al
0000004C 0000 add [bx+si],al
0000004E 0000 add [bx+si],al
00000050 0000 add [bx+si],al
00000052 0000 add [bx+si],al
00000054 0000 add [bx+si],al
00000056 0000 add [bx+si],al
00000058 0000 add [bx+si],al
0000005A 0000 add [bx+si],al
0000005C 0000 add [bx+si],al
0000005E 0000 add [bx+si],al
00000060 0000 add [bx+si],al
00000062 0000 add [bx+si],al
00000064 0000 add [bx+si],al
00000066 0000 add [bx+si],al
00000068 0000 add [bx+si],al
0000006A 0000 add [bx+si],al
0000006C 0000 add [bx+si],al
0000006E 0000 add [bx+si],al
00000070 0000 add [bx+si],al
00000072 0000 add [bx+si],al
00000074 0000 add [bx+si],al
00000076 0000 add [bx+si],al
00000078 0000 add [bx+si],al
0000007A 0000 add [bx+si],al
0000007C 0000 add [bx+si],al
0000007E 0000 add [bx+si],al
00000080 0000 add [bx+si],al
00000082 0000 add [bx+si],al
00000084 0000 add [bx+si],al
00000086 0000 add [bx+si],al
00000088 0000 add [bx+si],al
0000008A 0000 add [bx+si],al
0000008C 0000 add [bx+si],al
0000008E 0000 add [bx+si],al
00000090 0000 add [bx+si],al
00000092 0000 add [bx+si],al
00000094 0000 add [bx+si],al
00000096 0000 add [bx+si],al
00000098 0000 add [bx+si],al
0000009A 0000 add [bx+si],al
0000009C 0000 add [bx+si],al
0000009E 0000 add [bx+si],al
000000A0 0000 add [bx+si],al
000000A2 0000 add [bx+si],al
000000A4 0000 add [bx+si],al
000000A6 0000 add [bx+si],al
000000A8 0000 add [bx+si],al
000000AA 0000 add [bx+si],al
000000AC 0000 add [bx+si],al
000000AE 0000 add [bx+si],al
000000B0 0000 add [bx+si],al
000000B2 0000 add [bx+si],al
000000B4 0000 add [bx+si],al
000000B6 0000 add [bx+si],al
000000B8 0000 add [bx+si],al
000000BA 0000 add [bx+si],al
000000BC 0000 add [bx+si],al
000000BE 0000 add [bx+si],al
000000C0 0000 add [bx+si],al
000000C2 0000 add [bx+si],al
000000C4 0000 add [bx+si],al
000000C6 0000 add [bx+si],al
000000C8 0000 add [bx+si],al
000000CA 0000 add [bx+si],al
000000CC 0000 add [bx+si],al
000000CE 0000 add [bx+si],al
000000D0 0000 add [bx+si],al
000000D2 0000 add [bx+si],al
000000D4 0000 add [bx+si],al
000000D6 0000 add [bx+si],al
000000D8 0000 add [bx+si],al
000000DA 0000 add [bx+si],al
000000DC 0000 add [bx+si],al
000000DE 0000 add [bx+si],al
000000E0 0000 add [bx+si],al
000000E2 0000 add [bx+si],al
000000E4 0000 add [bx+si],al
000000E6 0000 add [bx+si],al
000000E8 0000 add [bx+si],al
000000EA 0000 add [bx+si],al
000000EC 0000 add [bx+si],al
000000EE 0000 add [bx+si],al
000000F0 0000 add [bx+si],al
000000F2 0000 add [bx+si],al
000000F4 0000 add [bx+si],al
000000F6 0000 add [bx+si],al
000000F8 0000 add [bx+si],al
000000FA 0000 add [bx+si],al
000000FC 0000 add [bx+si],al
000000FE 0000 add [bx+si],al
00000100 0000 add [bx+si],al
00000102 0000 add [bx+si],al
00000104 0000 add [bx+si],al
00000106 0000 add [bx+si],al
00000108 0000 add [bx+si],al
0000010A 0000 add [bx+si],al
0000010C 0000 add [bx+si],al
0000010E 0000 add [bx+si],al
00000110 0000 add [bx+si],al
00000112 0000 add [bx+si],al
00000114 0000 add [bx+si],al
00000116 0000 add [bx+si],al
00000118 0000 add [bx+si],al
0000011A 0000 add [bx+si],al
0000011C 0000 add [bx+si],al
0000011E 0000 add [bx+si],al
00000120 0000 add [bx+si],al
00000122 0000 add [bx+si],al
00000124 0000 add [bx+si],al
00000126 0000 add [bx+si],al
00000128 0000 add [bx+si],al
0000012A 0000 add [bx+si],al
0000012C 0000 add [bx+si],al
0000012E 0000 add [bx+si],al
00000130 0000 add [bx+si],al
00000132 0000 add [bx+si],al
00000134 0000 add [bx+si],al
00000136 0000 add [bx+si],al
00000138 0000 add [bx+si],al
0000013A 0000 add [bx+si],al
0000013C 0000 add [bx+si],al
0000013E 0000 add [bx+si],al
00000140 0000 add [bx+si],al
00000142 0000 add [bx+si],al
00000144 0000 add [bx+si],al
00000146 0000 add [bx+si],al
00000148 0000 add [bx+si],al
0000014A 0000 add [bx+si],al
0000014C 0000 add [bx+si],al
0000014E 0000 add [bx+si],al
00000150 0000 add [bx+si],al
00000152 0000 add [bx+si],al
00000154 0000 add [bx+si],al
00000156 0000 add [bx+si],al
00000158 0000 add [bx+si],al
0000015A 0000 add [bx+si],al
0000015C 0000 add [bx+si],al
0000015E 0000 add [bx+si],al
00000160 0000 add [bx+si],al
00000162 0000 add [bx+si],al
00000164 0000 add [bx+si],al
00000166 0000 add [bx+si],al
00000168 0000 add [bx+si],al
0000016A 0000 add [bx+si],al
0000016C 0000 add [bx+si],al
0000016E 0000 add [bx+si],al
00000170 0000 add [bx+si],al
00000172 0000 add [bx+si],al
00000174 0000 add [bx+si],al
00000176 0000 add [bx+si],al
00000178 0000 add [bx+si],al
0000017A 0000 add [bx+si],al
0000017C 0000 add [bx+si],al
0000017E 0000 add [bx+si],al
00000180 0000 add [bx+si],al
00000182 0000 add [bx+si],al
00000184 0000 add [bx+si],al
00000186 0000 add [bx+si],al
00000188 0000 add [bx+si],al
0000018A 0000 add [bx+si],al
0000018C 0000 add [bx+si],al
0000018E 0000 add [bx+si],al
00000190 0000 add [bx+si],al
00000192 0000 add [bx+si],al
00000194 0000 add [bx+si],al
00000196 0000 add [bx+si],al
00000198 0000 add [bx+si],al
0000019A 0000 add [bx+si],al
0000019C 0000 add [bx+si],al
0000019E 0000 add [bx+si],al
000001A0 0000 add [bx+si],al
000001A2 0000 add [bx+si],al
000001A4 0000 add [bx+si],al
000001A6 0000 add [bx+si],al
000001A8 0000 add [bx+si],al
000001AA 0000 add [bx+si],al
000001AC 0000 add [bx+si],al
000001AE 0000 add [bx+si],al
000001B0 0000 add [bx+si],al
000001B2 0000 add [bx+si],al
000001B4 0000 add [bx+si],al
000001B6 0000 add [bx+si],al
000001B8 0000 add [bx+si],al
000001BA 0000 add [bx+si],al
000001BC 0000 add [bx+si],al
000001BE 0000 add [bx+si],al
000001C0 0000 add [bx+si],al
000001C2 0000 add [bx+si],al
000001C4 0000 add [bx+si],al
000001C6 0000 add [bx+si],al
000001C8 0000 add [bx+si],al
000001CA 0000 add [bx+si],al
000001CC 0000 add [bx+si],al
000001CE 0000 add [bx+si],al
000001D0 0000 add [bx+si],al
000001D2 0000 add [bx+si],al
000001D4 0000 add [bx+si],al
000001D6 0000 add [bx+si],al
000001D8 0000 add [bx+si],al
000001DA 0000 add [bx+si],al
000001DC 0000 add [bx+si],al
000001DE 0000 add [bx+si],al
000001E0 0000 add [bx+si],al
000001E2 0000 add [bx+si],al
000001E4 0000 add [bx+si],al
000001E6 0000 add [bx+si],al
000001E8 0000 add [bx+si],al
000001EA 0000 add [bx+si],al
000001EC 0000 add [bx+si],al
000001EE 0000 add [bx+si],al
000001F0 0000 add [bx+si],al
000001F2 0000 add [bx+si],al
000001F4 0000 add [bx+si],al
000001F6 0000 add [bx+si],al
000001F8 0000 add [bx+si],al
000001FA 0000 add [bx+si],al
000001FC 0000 add [bx+si],al
000001FE 55 push bp
000001FF AA stosb
00000200 8CC8 mov ax,cs
00000202 8ED8 mov ds,ax
00000204 31C0 xor ax,ax
00000206 8ED0 mov ss,ax
00000208 FA cli
00000209 0F01168500 lgdt [0x85]
0000020E 0F20C0 mov eax,cr0
00000211 660D01000000 or eax,0x1
00000217 0F22C0 mov cr0,eax
0000021A E9FFFF jmp word 0x21c
0000021D 90 nop
0000021E 90 nop
0000021F 6667EA2800000008 jmp dword 0x8:0x28
-00
00000228 66BB10008EDB mov ebx,0xdb8e0010
0000022E 8EC3 mov es,bx
00000230 8EE3 mov fs,bx
00000232 8EEB mov gs,bx
00000234 8ED3 mov ss,bx
00000236 31C0 xor ax,ax
00000238 66B818008EC0 mov eax,0xc08e0018
0000023E BF5406 mov di,0x654
00000241 0000 add [bx+si],al
00000243 3E8D35 lea si,[ds:di]
00000246 6C insb
00000247 0000 add [bx+si],al
00000249 00E8 add al,ch
0000024B 050000 add ax,0x0
0000024E 00E9 add cl,ch
00000250 FB sti
00000251 FF db 0xff
00000252 FF db 0xff
00000253 FF5008 call word near [bx+si+0x8]
00000256 C0 db 0xc0
00000257 7411 jz 0x26a
00000259 8A062688 mov al,[0x8826]
0000025D 07 pop es
0000025E 47 inc di
0000025F 26C60706 mov byte [es:bx],0x6
00000263 46 inc si
00000264 47 inc di
00000265 E9EBFF jmp word 0x253
00000268 FF db 0xff
00000269 FF58C3 call word far [bx+si-0x3d]
0000026C 57 push di
0000026D 65206172 and [gs:bx+di+0x72],ah
00000271 6520696E and [gs:bx+di+0x6e],ch
00000275 205072 and [bx+si+0x72],dl
00000278 6F outsw
00000279 7465 jz 0x2e0
0000027B 637465 arpl [si+0x65],si
0000027E 64204D6F and [fs:di+0x6f],cl
00000282 6465001F add [gs:bx],bl
00000286 008B0001 add [bp+di+0x100],cl
0000028A 0000 add [bx+si],al
0000028C 0000 add [bx+si],al
0000028E 0000 add [bx+si],al
00000290 0000 add [bx+si],al
00000292 00FF add bh,bh
00000294 FF00 inc word [bx+si]
00000296 0001 add [bx+di],al
00000298 9ACF00FFFF call word 0xffff:0xcf
0000029D 0000 add [bx+si],al
0000029F 0192CF00 add [bp+si+0xcf],dx
000002A3 FF db 0xff
000002A4 FF00 inc word [bx+si]
000002A6 800B92 or byte [bp+di],0x92
000002A9 40 inc ax
000002AA 00 db 0x00
|