亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产不卡视频在线播放| 免费看精品久久片| 91尤物视频在线观看| 国产精品热久久久久夜色精品三区 | 欧美成人伊人久久综合网| 午夜精品123| 日韩欧美在线网站| 国产中文一区二区三区| 久久精品男人的天堂| 成人福利视频网站| 一区二区三区毛片| 日韩欧美一级在线播放| 精品亚洲免费视频| 国产午夜精品久久久久久免费视| 国产成人免费视频网站 | 在线观看区一区二| 亚洲成人综合在线| 日韩一区二区三| 福利一区二区在线观看| 一区二区三区日韩精品视频| 欧美日韩精品福利| 国产精品白丝jk黑袜喷水| 国产精品精品国产色婷婷| 欧美日精品一区视频| 国产一区二区视频在线| 亚洲人成影院在线观看| 欧美一区二区成人6969| 国产高清在线精品| 亚洲一区二区不卡免费| 久久尤物电影视频在线观看| 91美女片黄在线观看91美女| 日产欧产美韩系列久久99| 国产人伦精品一区二区| 国产精品欧美综合在线| 91麻豆精品国产91久久久资源速度 | 91黄色免费看| 狠狠色狠狠色综合日日91app| 国产精品久久久久久久久免费樱桃 | 99久久精品国产精品久久| 日韩vs国产vs欧美| 国产精品久久久久婷婷| 日韩欧美中文字幕公布| 色综合视频一区二区三区高清| 蜜桃视频一区二区三区在线观看 | 91精品国产综合久久久蜜臀粉嫩| 国产福利91精品| 日韩激情av在线| 国产精品国产三级国产| 精品国产一区二区三区不卡| 在线观看视频欧美| 福利一区二区在线| 国内精品视频666| 午夜视频一区在线观看| 中文字幕一区二区三区在线观看| 日韩三级免费观看| 在线亚洲免费视频| 成人激情小说乱人伦| 精品一区二区三区蜜桃| 视频一区二区中文字幕| 亚洲精品免费在线观看| 中文字幕一区二区三区蜜月| 国产日韩综合av| 精品福利在线导航| 日韩精品一区在线观看| 欧美精选午夜久久久乱码6080| 91亚洲精华国产精华精华液| 国产成人av一区| 国产精品综合在线视频| 久久99国产精品久久| 日本网站在线观看一区二区三区 | 亚洲欧美韩国综合色| 国产精品免费丝袜| 久久精品免视看| 久久精品亚洲国产奇米99| 26uuu精品一区二区| 日韩欧美aaaaaa| 91精品欧美一区二区三区综合在| 欧美三级午夜理伦三级中视频| 色www精品视频在线观看| 91亚洲精品一区二区乱码| 99久久er热在这里只有精品15| 成人免费毛片嘿嘿连载视频| 丁香亚洲综合激情啪啪综合| 国产福利视频一区二区三区| 国产精品一线二线三线精华| 国产精品99久久久久久久vr| 国产一区二区调教| 高清不卡一二三区| 91视频免费看| 欧美日韩精品电影| 日韩免费在线观看| 国产欧美日韩不卡免费| 国产精品国产馆在线真实露脸| 国产精品久久久久一区二区三区 | 一区二区三区产品免费精品久久75| 亚洲天天做日日做天天谢日日欢| 国产精品不卡在线| 亚洲黄色av一区| 亚洲第一主播视频| 久久精品72免费观看| 久久精品国产成人一区二区三区| 韩国v欧美v亚洲v日本v| 国产成人av福利| 日本乱人伦一区| 欧美福利一区二区| 久久嫩草精品久久久久| 国产精品久线观看视频| 亚洲国产精品精华液网站| 奇米精品一区二区三区在线观看一| 蜜桃久久精品一区二区| 岛国精品在线观看| 欧美三级电影一区| 久久综合九色综合欧美98| 国产精品久久久久久久久免费樱桃| 亚洲愉拍自拍另类高清精品| 激情综合色丁香一区二区| 99久久婷婷国产综合精品| 欧美一区2区视频在线观看| 中文字幕乱码久久午夜不卡 | 国产精品国产a| 五月婷婷综合激情| 国产mv日韩mv欧美| 欧美二区在线观看| 国产精品蜜臀在线观看| 免费成人在线影院| 色偷偷88欧美精品久久久| 精品国产免费一区二区三区四区 | 国产精品99久久久久久似苏梦涵 | 日本亚洲欧美天堂免费| av亚洲精华国产精华| 日韩午夜激情视频| 亚洲色图丝袜美腿| 国产中文一区二区三区| 欧美日韩国产首页在线观看| 国产欧美日韩精品一区| 美国欧美日韩国产在线播放| 色一区在线观看| 国产日韩av一区二区| 日韩电影在线观看一区| 94-欧美-setu| 久久人人爽人人爽| 青椒成人免费视频| 在线观看成人小视频| 中日韩av电影| 国产资源精品在线观看| 欧美一级xxx| 一区二区三区国产精品| 91在线一区二区三区| 国产精品美女久久久久aⅴ国产馆| 日韩精品乱码av一区二区| 欧美三级韩国三级日本一级| 亚洲精品成人精品456| 成人国产精品视频| 日本一区二区三区四区| 久久成人免费日本黄色| 宅男在线国产精品| 亚洲成a人片在线观看中文| 色偷偷一区二区三区| 亚洲免费观看高清完整版在线观看| 国产精品1区2区3区在线观看| 欧美成人三级在线| 蜜臀久久99精品久久久画质超高清 | 国产精品三级在线观看| 国产成人免费视频网站高清观看视频| 欧美成人精精品一区二区频| 五月天亚洲精品| 欧美高清视频在线高清观看mv色露露十八 | 国产成人在线电影| 国产午夜精品理论片a级大结局| 国内精品自线一区二区三区视频| 欧美成人vps| 狠狠狠色丁香婷婷综合久久五月| 精品久久久久99| 经典三级一区二区| 久久久99精品久久| 成人app网站| ...xxx性欧美| 日本久久一区二区| 午夜精品一区二区三区三上悠亚| 欧美午夜一区二区三区| 丝袜亚洲另类丝袜在线| 日韩一区二区三区电影 | 亚洲国产激情av| 国产成人在线电影| 亚洲视频一二区| 欧美日韩一区二区不卡| 热久久免费视频| 久久美女艺术照精彩视频福利播放| 国产激情精品久久久第一区二区 | 日韩一区二区中文字幕| 欧美日韩精品专区| 久久狠狠亚洲综合| 中文字幕成人网| 色素色在线综合| 日韩综合小视频| 欧美成人精品3d动漫h| 成人a免费在线看| 亚洲成人一二三| 2020国产成人综合网| 91亚洲精品一区二区乱码|