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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? kernel.asm

?? 自己動(dòng)手寫操作系統(tǒng)源碼包含有各種小工具
?? ASM
字號(hào):

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


%include "sconst.inc"

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

; 導(dǎo)入全局變量
extern	gdt_ptr
extern	idt_ptr
extern	p_proc_ready
extern	tss
extern	disp_pos
extern	k_reenter
extern	irq_table
extern	sys_call_table

bits 32

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

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

[section .text]	; 代碼在此

global _start	; 導(dǎo)出 _start

global	restart
global	sys_call

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:
	; 此時(shí)內(nèi)存看上去是這樣的(更詳細(xì)的內(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 以及相應(yīng)的描述符是這樣的:
	;
	;		              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 代碼的時(shí)候一定要保證 ds, es, ss 這幾個(gè)段寄存器的值是一樣的
	; 因?yàn)榫幾g器有可能編譯出使用它們的代碼, 而編譯器默認(rèn)它們是一樣的. 比如串拷貝操作會(huì)用到 ds 和 es.
	;
	;


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

	mov	dword [disp_pos], 0

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

	lidt	[idt_ptr]

	jmp	SELECTOR_KERNEL_CS:csinit
csinit:		; “這個(gè)跳轉(zhuǎn)指令強(qiáng)制使用剛剛初始化的結(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
	call	save
	in	al, INT_M_CTLMASK	; ┓
	or	al, (1 << %1)		; ┣ 屏蔽當(dāng)前中斷
	out	INT_M_CTLMASK, al	; ┛
	mov	al, EOI			; ┓置EOI位
	out	INT_M_CTL, al		; ┛
	sti	; CPU在響應(yīng)中斷的過程中會(huì)自動(dòng)關(guān)中斷,這句之后就允許響應(yīng)新的中斷
	push	%1			; ┓
	call	[irq_table + 4 * %1]	; ┣ 中斷處理程序
	pop	ecx			; ┛
	cli
	in	al, INT_M_CTLMASK	; ┓
	and	al, ~(1 << %1)		; ┣ 恢復(fù)接受當(dāng)前中斷
	out	INT_M_CTLMASK, al	; ┛
	ret
%endmacro



ALIGN	16
hwint00:		; Interrupt routine for irq 0 (the clock).
	hwint_master	0

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

; ====================================================================================
;                                   save
; ====================================================================================
save:
	pushad		; ┓
	push	ds	; ┃
	push	es	; ┣ 保存原寄存器值
	push	fs	; ┃
	push	gs	; ┛
	mov	dx, ss
	mov	ds, dx
	mov	es, dx

	mov	esi, esp			; esi = 進(jìn)程表起始地址

	inc	dword [k_reenter]		; k_reenter++;
	cmp	dword [k_reenter], 0		; if(k_reenter ==0)
	jne	.1				; {
	mov	esp, StackTop			;	mov esp, StackTop <-- 切換到內(nèi)核棧
	push	restart				;	push restart
	jmp	[esi + RETADR - P_STACKBASE]	;	return;
.1:						; } else { 已經(jīng)在內(nèi)核棧,不需要再切換
	push	restart_reenter			;	push restart_reenter
	jmp	[esi + RETADR - P_STACKBASE]	;	return;
						; }


; ====================================================================================
;                                 sys_call
; ====================================================================================
sys_call:
	call	save

	sti

	call	[sys_call_table + eax * 4]
	mov	[esi + EAXREG - P_STACKBASE], eax

	cli

	ret


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


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品一区二区夜色| 亚洲男同性视频| 51精品视频一区二区三区| 91激情在线视频| 97久久精品人人做人人爽50路| 麻豆精品视频在线观看| 青青草国产成人99久久| 亚洲va在线va天堂| 午夜成人免费电影| 日本不卡一区二区三区| 日韩和欧美一区二区| 午夜久久久久久电影| 亚洲v日本v欧美v久久精品| 亚州成人在线电影| 蜜桃精品视频在线| 国产一区二区日韩精品| 高清在线不卡av| 99精品视频在线免费观看| 91麻豆国产自产在线观看| 日本高清免费不卡视频| 69堂国产成人免费视频| 精品精品欲导航| 国产精品美女一区二区在线观看| 国产精品美女久久久久久久| 亚洲欧美综合网| 亚洲国产精品嫩草影院| 麻豆一区二区三区| 94色蜜桃网一区二区三区| 欧美老肥妇做.爰bbww| 日韩欧美亚洲一区二区| 欧美国产一区二区| 亚洲电影你懂得| 国产在线播精品第三| 94色蜜桃网一区二区三区| 在线成人免费观看| 国产三级欧美三级| 亚洲一区在线观看视频| 国产剧情一区二区| 91成人免费在线视频| 欧美一区二区福利在线| 国产精品三级av| 亚洲福利视频一区| 一区二区高清免费观看影视大全 | 成人aa视频在线观看| 欧美日韩一区二区三区四区| 国产日韩综合av| 日韩成人一级片| 91原创在线视频| 精品国产123| 综合分类小说区另类春色亚洲小说欧美| 亚洲一区在线视频观看| 成人免费高清视频在线观看| 91精品久久久久久久久99蜜臂| 日本一区二区三级电影在线观看| 五月婷婷色综合| 99视频一区二区| 欧美精品一区二区久久婷婷| 亚洲一二三区视频在线观看| 国产成人三级在线观看| 日韩精品一区二区三区老鸭窝| 亚洲激情在线播放| 成人听书哪个软件好| 欧美电影免费提供在线观看| 亚洲精品乱码久久久久久黑人| 国产精品一区免费视频| 欧美一区二区精品在线| 亚洲一二三级电影| 色视频欧美一区二区三区| 国产欧美一区二区三区鸳鸯浴 | 欧美激情中文字幕一区二区| 奇米精品一区二区三区在线观看一| 99久久精品费精品国产一区二区| 久久夜色精品一区| 韩国毛片一区二区三区| 欧美精品一区二区三区蜜桃| 青娱乐精品视频| 日韩欧美亚洲另类制服综合在线| 天堂在线一区二区| 制服丝袜亚洲网站| 日韩精品亚洲一区二区三区免费| 在线免费亚洲电影| 亚洲国产中文字幕| 91.麻豆视频| 久久9热精品视频| 久久免费国产精品| 丁香六月综合激情| 亚洲人成人一区二区在线观看| 91免费国产在线| 一区二区三区四区视频精品免费 | 国产午夜精品一区二区三区嫩草| 韩国精品在线观看| 中文字幕乱码亚洲精品一区| 国产成人免费视频精品含羞草妖精| 久久久国产精华| av电影天堂一区二区在线| 日韩理论片中文av| 欧美三级韩国三级日本三斤| 日韩制服丝袜av| 久久一留热品黄| 成人av在线一区二区三区| 亚洲美女淫视频| 欧美一区二区精品久久911| 国产精品小仙女| 依依成人综合视频| 欧美一区二区美女| 成人丝袜视频网| 亚洲福中文字幕伊人影院| 日韩一区二区不卡| 成人高清在线视频| 亚洲成a天堂v人片| 国产三级三级三级精品8ⅰ区| 99久久精品99国产精品| 丝袜美腿亚洲综合| 国产三级欧美三级| 7777精品伊人久久久大香线蕉完整版| 久久99久久99精品免视看婷婷| 国产精品九色蝌蚪自拍| 3atv一区二区三区| 成人av资源下载| 蜜臂av日日欢夜夜爽一区| 国产精品美女久久久久久久网站| 欧美色爱综合网| 国产盗摄一区二区三区| 亚洲妇女屁股眼交7| 中文字幕欧美激情| 日韩欧美精品在线视频| av激情亚洲男人天堂| 蜜桃视频一区二区三区在线观看| 欧美国产激情一区二区三区蜜月| 欧美男女性生活在线直播观看| 成人免费看视频| 国产呦萝稀缺另类资源| 水野朝阳av一区二区三区| 亚洲欧洲无码一区二区三区| 久久久一区二区三区捆绑**| 在线播放91灌醉迷j高跟美女| 成人免费高清在线| 国产成人日日夜夜| 国内精品伊人久久久久av影院| 舔着乳尖日韩一区| 亚洲午夜免费电影| 一区二区三区不卡视频| 亚洲欧洲精品一区二区精品久久久 | 91片黄在线观看| 国产91富婆露脸刺激对白| 国产自产2019最新不卡| 麻豆精品久久久| 韩国一区二区三区| 国产一区二区三区免费看| 另类人妖一区二区av| 免费看日韩精品| 奇米综合一区二区三区精品视频| 亚洲成a人片综合在线| 亚洲一二三四久久| 亚洲国产三级在线| 午夜天堂影视香蕉久久| 国产精品黄色在线观看| 91精品国产一区二区三区蜜臀| jlzzjlzz国产精品久久| 国产乱码精品一区二区三区五月婷| 18成人在线观看| 亚洲综合丁香婷婷六月香| 久久精品夜色噜噜亚洲a∨| 91麻豆自制传媒国产之光| 激情六月婷婷久久| 午夜国产精品一区| 亚洲一区二区美女| 亚洲欧洲国产日本综合| 久久久久久免费网| 国产午夜精品在线观看| 欧美大胆一级视频| 91麻豆精品国产91久久久久| 99久久精品国产麻豆演员表| 国产精品综合网| 麻豆91免费观看| 日本不卡视频一二三区| 日韩电影在线观看电影| 亚洲国产精品精华液网站| 亚洲第一激情av| 卡一卡二国产精品| 国产精品一级片在线观看| 色8久久精品久久久久久蜜| 不卡欧美aaaaa| 色婷婷精品大在线视频 | 一区二区三区精品| 日本不卡的三区四区五区| 亚洲成av人片一区二区三区| 国产精品乱人伦| 欧美日韩一级二级| 欧美在线观看禁18| 欧美午夜电影网| 欧美在线观看18| 成人高清视频在线| 成人免费视频国产在线观看| 夜夜嗨av一区二区三区| 国产一区二区影院| 不卡一区二区三区四区| 亚洲不卡在线观看| 久久丁香综合五月国产三级网站| 亚洲同性gay激情无套|