?? kernel.asm
字號(hào):
[section .data]
%include "const.inc"
;TopOfStack equ 0fffeh
KernelMess db "kernel running! :)",0a0h,0
_Disposition dd (10*80+0)*2 ;保護(hù)模式下顯示字符串位置
PM_Disposition equ _Disposition
DispNewLine: db 0a0h,0
SelectorCr equ 8
SelectorDRW equ 16
SelectorVideo equ 24
TopOfStack equ 0fffeh
extern cstart
extern GDTPtr ;0x31fc0
extern IDTPtr ;0x31c40
[section .text]
[bits 32]
align 32
global _start
global init_port
_start:
; mov ax,SelectorDRW
; mov ds,ax
; mov es,ax
; mov ss,ax
; mov sp,TopOfStack
; mov bp,sp
; mov ax,SelectorVideo
; mov gs,ax
sgdt [GDTPtr] ;0x30400
call cstart ;將gdt表從loader中搬到kernel中
lgdt [GDTPtr]
lidt [IDTPtr]
jmp SelectorCr:init
init:
push DispNewLine
call PM_DispStr
add esp,4
push KernelMess
call PM_DispStr
add esp,4
sti
jmp $
jmp $
PM_DispStr:
push ebp
mov ebp,esp
push esi
push edi
push eax
push ebx
push edx
mov esi,[ebp+8]
mov edi,[PM_Disposition]
.1:
lodsb
test al,al
jz .2
cmp al,0a0h
jz .3
mov ah,0fh
mov [gs:edi],ax
add edi,2
jmp .1
.3
xor edx,edx
mov eax,edi
mov ebx,160
div ebx
inc eax
mul ebx
cmp edx,0
jnz .4
mov edi,eax
jmp .1
.4:
jmp $
.2
mov [PM_Disposition], edi
pop edx
pop ebx
pop eax
pop edi
pop esi
mov esp,ebp
pop ebp
ret
;init_port(port,value)
init_port:
push ebp
mov ebp,esp
push eax
push edx
mov al,[ebp+12]
mov dx,[ebp+8]
out dx,al
nop ; 一點(diǎn)延遲
nop
pop edx
pop eax
mov esp,ebp
pop ebp
ret
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -