亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kernel.asm

?? 自己動手寫操作 系統(tǒng) 的源 代 碼 這里有完整的源代碼
?? ASM
字號:

; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;                               kernel.asm
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;                                                     Forrest Yu, 2005
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


%include "sconst.inc"

; 導入函數(shù)
extern	cstart
extern	tinix_main
extern	exception_handler
extern	spurious_irq
extern	clock_handler
extern	disp_str
extern	delay

; 導入全局變量
extern	gdt_ptr
extern	idt_ptr
extern	p_proc_ready
extern	tss
extern	disp_pos
extern	k_reenter

bits 32

[SECTION .data]
clock_int_msg		db	"^", 0

[SECTION .bss]
StackSpace		resb	2 * 1024
StackTop:		; 棧頂

[section .text]	; 代碼在此

global _start	; 導出 _start

global restart

global	divide_error
global	single_step_exception
global	nmi
global	breakpoint_exception
global	overflow
global	bounds_check
global	inval_opcode
global	copr_not_available
global	double_fault
global	copr_seg_overrun
global	inval_tss
global	segment_not_present
global	stack_exception
global	general_protection
global	page_fault
global	copr_error
global	hwint00
global	hwint01
global	hwint02
global	hwint03
global	hwint04
global	hwint05
global	hwint06
global	hwint07
global	hwint08
global	hwint09
global	hwint10
global	hwint11
global	hwint12
global	hwint13
global	hwint14
global	hwint15


_start:
	; 此時內(nèi)存看上去是這樣的(更詳細的內(nèi)存情況在 LOADER.ASM 中有說明):
	;              ┃                                    ┃
	;              ┃                 ...                ┃
	;              ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃■■■■■■Page  Tables■■■■■■┃
	;              ┃■■■■■(大小由LOADER決定)■■■■┃ PageTblBase
	;    00101000h ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃■■■■Page Directory Table■■■■┃ PageDirBase = 1M
	;    00100000h ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃□□□□ Hardware  Reserved □□□□┃ B8000h ← gs
	;       9FC00h ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃■■■■■■■LOADER.BIN■■■■■■┃ somewhere in LOADER ← esp
	;       90000h ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃■■■■■■■KERNEL.BIN■■■■■■┃
	;       80000h ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃■■■■■■■■KERNEL■■■■■■■┃ 30400h ← KERNEL 入口 (KernelEntryPointPhyAddr)
	;       30000h ┣━━━━━━━━━━━━━━━━━━┫
	;              ┋                 ...                ┋
	;              ┋                                    ┋
	;           0h ┗━━━━━━━━━━━━━━━━━━┛ ← cs, ds, es, fs, ss
	;
	;
	; GDT 以及相應的描述符是這樣的:
	;
	;		              Descriptors               Selectors
	;              ┏━━━━━━━━━━━━━━━━━━┓
	;              ┃         Dummy Descriptor           ┃
	;              ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃         DESC_FLAT_C    (0~4G)     ┃   8h = cs
	;              ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃         DESC_FLAT_RW   (0~4G)     ┃  10h = ds, es, fs, ss
	;              ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃         DESC_VIDEO                 ┃  1Bh = gs
	;              ┗━━━━━━━━━━━━━━━━━━┛
	;
	; 注意! 在使用 C 代碼的時候一定要保證 ds, es, ss 這幾個段寄存器的值是一樣的
	; 因為編譯器有可能編譯出使用它們的代碼, 而編譯器默認它們是一樣的. 比如串拷貝操作會用到 ds 和 es.
	;
	;


	; 把 esp 從 LOADER 挪到 KERNEL
	mov	esp, StackTop	; 堆棧在 bss 段中

	mov	dword [disp_pos], 0

	sgdt	[gdt_ptr]	; cstart() 中將會用到 gdt_ptr
	call	cstart		; 在此函數(shù)中改變了gdt_ptr,讓它指向新的GDT
	lgdt	[gdt_ptr]	; 使用新的GDT

	lidt	[idt_ptr]

	jmp	SELECTOR_KERNEL_CS:csinit
csinit:		; “這個跳轉(zhuǎn)指令強制使用剛剛初始化的結(jié)構(gòu)”——<<OS:D&I 2nd>> P90.

	;jmp 0x40:0
	;ud2

	;sti

	xor	eax, eax
	mov	ax, SELECTOR_TSS
	ltr	ax

	jmp	tinix_main

	;hlt


; 中斷和異常 -- 硬件中斷
; ---------------------------------
%macro	hwint_master	1
	push	%1
	call	spurious_irq
	add	esp, 4
	hlt
%endmacro


ALIGN	16
hwint00:		; Interrupt routine for irq 0 (the clock).
	sub	esp, 4
	pushad		; ┓
	push	ds	; ┃
	push	es	; ┣ 保存原寄存器值
	push	fs	; ┃
	push	gs	; ┛
	mov	dx, ss
	mov	ds, dx
	mov	es, dx

	;inc	byte [gs:0]	; 改變屏幕第 0 行, 第 0 列的字符

	mov	al, EOI		; ┓reenable master 8259
	out	INT_M_CTL, al	; ┛

	inc	dword [k_reenter]
	cmp	dword [k_reenter], 0
	jne	.re_enter

	mov	esp, StackTop		; 切到內(nèi)核棧

	sti

	push	0
	call	clock_handler
	add	esp, 4

	cli

	mov	esp, [p_proc_ready]	; 離開內(nèi)核棧;
	lldt	[esp + P_LDT_SEL]
	lea	eax, [esp + P_STACKTOP]
	mov	dword [tss + TSS3_S_SP0], eax

.re_enter:	; 如果(k_reenter != 0),會跳轉(zhuǎn)到這里
	dec	dword [k_reenter]	; k_reenter--;
	pop	gs	; ┓
	pop	fs	; ┃
	pop	es	; ┣ 恢復原寄存器值
	pop	ds	; ┃
	popad		; ┛
	add	esp, 4

	iretd


ALIGN	16
hwint01:		; Interrupt routine for irq 1 (keyboard)
	hwint_master	1

ALIGN	16
hwint02:		; Interrupt routine for irq 2 (cascade!)
	hwint_master	2

ALIGN	16
hwint03:		; Interrupt routine for irq 3 (second serial)
	hwint_master	3

ALIGN	16
hwint04:		; Interrupt routine for irq 4 (first serial)
	hwint_master	4

ALIGN	16
hwint05:		; Interrupt routine for irq 5 (XT winchester)
	hwint_master	5

ALIGN	16
hwint06:		; Interrupt routine for irq 6 (floppy)
	hwint_master	6

ALIGN	16
hwint07:		; Interrupt routine for irq 7 (printer)
	hwint_master	7

; ---------------------------------
%macro	hwint_slave	1
	push	%1
	call	spurious_irq
	add	esp, 4
	hlt
%endmacro
; ---------------------------------

ALIGN	16
hwint08:		; Interrupt routine for irq 8 (realtime clock).
	hwint_slave	8

ALIGN	16
hwint09:		; Interrupt routine for irq 9 (irq 2 redirected)
	hwint_slave	9

ALIGN	16
hwint10:		; Interrupt routine for irq 10
	hwint_slave	10

ALIGN	16
hwint11:		; Interrupt routine for irq 11
	hwint_slave	11

ALIGN	16
hwint12:		; Interrupt routine for irq 12
	hwint_slave	12

ALIGN	16
hwint13:		; Interrupt routine for irq 13 (FPU exception)
	hwint_slave	13

ALIGN	16
hwint14:		; Interrupt routine for irq 14 (AT winchester)
	hwint_slave	14

ALIGN	16
hwint15:		; Interrupt routine for irq 15
	hwint_slave	15



; 中斷和異常 -- 異常
divide_error:
	push	0xFFFFFFFF	; no err code
	push	0		; vector_no	= 0
	jmp	exception
single_step_exception:
	push	0xFFFFFFFF	; no err code
	push	1		; vector_no	= 1
	jmp	exception
nmi:
	push	0xFFFFFFFF	; no err code
	push	2		; vector_no	= 2
	jmp	exception
breakpoint_exception:
	push	0xFFFFFFFF	; no err code
	push	3		; vector_no	= 3
	jmp	exception
overflow:
	push	0xFFFFFFFF	; no err code
	push	4		; vector_no	= 4
	jmp	exception
bounds_check:
	push	0xFFFFFFFF	; no err code
	push	5		; vector_no	= 5
	jmp	exception
inval_opcode:
	push	0xFFFFFFFF	; no err code
	push	6		; vector_no	= 6
	jmp	exception
copr_not_available:
	push	0xFFFFFFFF	; no err code
	push	7		; vector_no	= 7
	jmp	exception
double_fault:
	push	8		; vector_no	= 8
	jmp	exception
copr_seg_overrun:
	push	0xFFFFFFFF	; no err code
	push	9		; vector_no	= 9
	jmp	exception
inval_tss:
	push	10		; vector_no	= A
	jmp	exception
segment_not_present:
	push	11		; vector_no	= B
	jmp	exception
stack_exception:
	push	12		; vector_no	= C
	jmp	exception
general_protection:
	push	13		; vector_no	= D
	jmp	exception
page_fault:
	push	14		; vector_no	= E
	jmp	exception
copr_error:
	push	0xFFFFFFFF	; no err code
	push	16		; vector_no	= 10h
	jmp	exception

exception:
	call	exception_handler
	add	esp, 4*2	; 讓棧頂指向 EIP,堆棧中從頂向下依次是:EIP、CS、EFLAGS
	hlt


; ====================================================================================
;                                   restart
; ====================================================================================
restart:
	mov	esp, [p_proc_ready]
	lldt	[esp + P_LDT_SEL] 
	lea	eax, [esp + P_STACKTOP]
	mov	dword [tss + TSS3_S_SP0], eax
	pop	gs
	pop	fs
	pop	es
	pop	ds
	popad
	add	esp, 4
	iretd


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区在| 国产一区三区三区| 国产精品久久久久久久久免费丝袜 | 麻豆一区二区三区| 亚洲午夜在线观看视频在线| 国产精品美女一区二区三区| 久久久久久久综合日本| 欧美成人精品高清在线播放| 91麻豆精品91久久久久久清纯| 欧美高清视频一二三区 | 蜜臀久久久99精品久久久久久| 同产精品九九九| 免费视频一区二区| 国产精品12区| 91啪亚洲精品| 欧美福利一区二区| 久久久精品2019中文字幕之3| 国产色婷婷亚洲99精品小说| 一区在线观看视频| 亚洲一区影音先锋| 久久国产综合精品| av电影在线观看一区| 欧美日韩亚洲高清一区二区| 欧美一级淫片007| 欧美国产禁国产网站cc| 一区二区免费看| 国内外成人在线视频| 97久久久精品综合88久久| 欧美日韩精品一区二区三区蜜桃 | 成人综合婷婷国产精品久久蜜臀| 91麻豆高清视频| 日韩欧美成人一区二区| 1024成人网| 经典三级视频一区| av亚洲精华国产精华| 欧美日韩国产成人在线91| 国产亚洲精品bt天堂精选| 一区二区三区日韩欧美| 精品一区二区国语对白| 色94色欧美sute亚洲13| 久久九九久久九九| 日韩黄色小视频| 99久久精品免费| 欧美电影免费提供在线观看| 国产精品成人网| 国产精品1区二区.| 51精品秘密在线观看| 自拍偷拍国产亚洲| 国产精品99久久久久久久vr| 欧美另类变人与禽xxxxx| 亚洲日本乱码在线观看| 久久精品国产亚洲aⅴ| 91久久线看在观草草青青| 久久久久九九视频| 日韩经典一区二区| 91丨porny丨在线| 26uuu精品一区二区| 香蕉成人伊视频在线观看| 成人黄色大片在线观看| 久久免费看少妇高潮| 麻豆91免费看| 91精品国产黑色紧身裤美女| 亚洲国产成人av好男人在线观看| 色综合天天视频在线观看 | 综合久久一区二区三区| 高清不卡一区二区| 久久人人超碰精品| 国产精品一区二区视频| 久久婷婷色综合| 国产一区二区三区在线观看精品| 日韩欧美国产午夜精品| 日产精品久久久久久久性色 | 亚洲成av人影院| 欧洲精品一区二区| 亚洲午夜精品一区二区三区他趣| av电影在线不卡| 亚洲免费资源在线播放| 日本韩国欧美三级| 亚洲午夜久久久久久久久电影网| 欧美日韩中文精品| 亚洲成人免费影院| 日韩三级视频在线观看| 欧美日韩中文字幕一区二区| 亚洲成人精品一区| 在线成人小视频| 国产在线播放一区三区四| 国产日韩欧美亚洲| 一本到不卡免费一区二区| 亚洲午夜久久久久| 日韩精品一区二区在线| 国产大陆精品国产| 一区二区三区四区亚洲| 欧美三区在线观看| 久久国产三级精品| 欧美丰满美乳xxx高潮www| 日韩专区欧美专区| 日韩欧美成人激情| 国产伦精品一区二区三区在线观看| 26uuu国产一区二区三区| 国产成人高清在线| 亚洲一区二区三区四区五区黄| 欧美日韩久久一区| 国产真实乱子伦精品视频| 国产精品福利一区| 91精品国产综合久久精品麻豆| 国产在线不卡一区| 亚洲欧美另类图片小说| 91精品国产综合久久久久久| 国产a视频精品免费观看| 亚洲成人综合视频| 精品国产乱码久久久久久牛牛| 风间由美性色一区二区三区| 亚洲日本在线观看| 日韩无一区二区| www.日韩大片| 美女精品自拍一二三四| 亚洲国产高清在线| 欧美精品久久一区| jlzzjlzz欧美大全| 韩国女主播成人在线观看| 一区二区三区高清在线| 久久综合99re88久久爱| 欧美日韩二区三区| 91在线观看免费视频| 国产在线视频不卡二| 天堂在线一区二区| 亚洲激情中文1区| 国产色婷婷亚洲99精品小说| 欧美日本一区二区三区| jiyouzz国产精品久久| 日本欧美在线看| 一区二区三区四区蜜桃| 亚洲欧美偷拍三级| 国产精品久久久久久福利一牛影视 | 99久久精品免费看国产| 精品亚洲aⅴ乱码一区二区三区| 亚洲美女偷拍久久| 国产日韩欧美麻豆| 国产色91在线| 欧美精品日韩一本| 不卡av在线免费观看| 国产精品一区在线观看乱码| 蜜桃av一区二区在线观看| 亚洲成人激情综合网| 亚洲国产成人高清精品| 亚洲一区二区欧美| 亚洲综合一区二区三区| 一区二区三区四区视频精品免费| 亚洲日本一区二区| 一区二区三区在线播放| 一区二区成人在线| 亚洲精品国产精品乱码不99| 洋洋av久久久久久久一区| 一区二区三区在线观看欧美| 亚洲黄色av一区| 一区2区3区在线看| 亚洲成人自拍偷拍| 爽好多水快深点欧美视频| 日韩精品一二三区| 欧美aaaaa成人免费观看视频| 性欧美疯狂xxxxbbbb| 日日欢夜夜爽一区| 偷窥国产亚洲免费视频| 日韩专区一卡二卡| 精品一区二区成人精品| 国产真实乱对白精彩久久| 精品一区二区综合| 国产成人精品亚洲日本在线桃色| 国产精品亚洲第一| 成人国产免费视频| 福利视频网站一区二区三区| 99久久综合色| 51精品秘密在线观看| 精品毛片乱码1区2区3区| 国产免费成人在线视频| 亚洲男人天堂av网| 婷婷激情综合网| 国产精品一区专区| 在线观看日韩精品| 精品美女在线播放| 亚洲啪啪综合av一区二区三区| 亚洲成av人片在线| 国产精品77777| 欧美性色综合网| 亚洲精品一区二区三区在线观看| 欧美韩日一区二区三区四区| 亚洲日穴在线视频| 石原莉奈在线亚洲三区| 国产盗摄一区二区| 欧美日韩精品专区| 久久久久久久久伊人| 亚洲美女区一区| 国产精一品亚洲二区在线视频| 99久久久精品免费观看国产蜜| 日韩一区二区精品| 亚洲三级小视频| 粉嫩绯色av一区二区在线观看 | 久久久国产午夜精品| 一区二区三区四区乱视频| 国产福利一区二区三区视频|