⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kernel.asm

📁 一个简单的操作系统,用的是nasm写的,包括进程调度,中断处理
💻 ASM
字号:

[section	.data]
%include	"const.inc" 
;TopOfStack	equ	0fffeh
KernelMess	db	"kernel running! :)",0a0h,0
_Disposition	dd	(10*80+0)*2	;保护模式下显示字符串位置
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	; 一点延迟
	nop

	pop	edx
	pop	eax
	mov	esp,ebp
	pop	ebp
	ret
	
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -