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

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

?? kernel.asm

?? 《自己動(dòng)手寫操作系統(tǒng)》的隨書附贈(zè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久久人澡人人添人人爽欧美 | 成人动漫视频在线| 亚洲一区精品在线| 欧美日韩二区三区| 国产精品久久久久一区| 欧美一区二区三区小说| 奇米777欧美一区二区| 亚洲欧美另类久久久精品2019| 日韩视频免费观看高清完整版在线观看 | 91丨九色丨蝌蚪富婆spa| 午夜久久久久久久久| 欧美国产精品专区| 欧美成人精品1314www| 欧美在线啊v一区| 亚洲综合丝袜美腿| 中文字幕制服丝袜成人av| 欧美mv日韩mv国产网站app| 六月丁香婷婷久久| 日韩av一区二区三区| 午夜天堂影视香蕉久久| 亚洲午夜在线观看视频在线| 亚洲人成精品久久久久久| 国产精品理伦片| 国产精品不卡一区二区三区| 欧洲视频一区二区| 色婷婷亚洲精品| 色88888久久久久久影院野外| 99久久99精品久久久久久| 亚洲视频在线观看一区| 欧美日韩不卡视频| 高清不卡一区二区| 亚洲国产精品久久久久婷婷884| 欧美一区二区观看视频| 成人黄色777网| 国产精品资源站在线| 狠狠色丁香久久婷婷综合丁香| 日韩高清在线观看| 日韩 欧美一区二区三区| 久久精品夜夜夜夜久久| 国产三级一区二区| 国产精品久久久久桃色tv| 中文字幕一区av| 日韩精品专区在线影院观看| 成人黄色av电影| 婷婷丁香激情综合| 日韩理论片中文av| 欧美不卡激情三级在线观看| 精品国产1区2区3区| 国产女人18水真多18精品一级做 | 精品一区二区三区久久久| 久久99精品久久久久久国产越南 | 亚洲激情第一区| 视频一区欧美日韩| 美国十次了思思久久精品导航| 韩国女主播一区| 成人app网站| 欧美日韩一级二级三级| 日韩视频一区二区在线观看| 国产亚洲一区二区在线观看| 欧美亚洲动漫制服丝袜| 欧美v亚洲v综合ⅴ国产v| 欧美疯狂做受xxxx富婆| 久久一夜天堂av一区二区三区| 国产精品入口麻豆九色| 亚洲一区二区精品久久av| 欧美国产禁国产网站cc| 日韩欧美激情四射| 国产精品网站在线观看| 日韩美女主播在线视频一区二区三区| 久久精品免费在线观看| 日韩一区欧美二区| 99国产精品国产精品久久| 精品999在线播放| 欧美激情一区三区| 亚洲黄色av一区| eeuss鲁片一区二区三区在线观看| 99久久国产综合精品色伊| 精品电影一区二区三区| 国产精品系列在线| 国产精品亚洲一区二区三区妖精| 欧美挠脚心视频网站| 亚洲综合一区二区精品导航| 九色|91porny| 日韩午夜激情av| 亚洲va欧美va人人爽| 欧美亚洲另类激情小说| 日韩欧美黄色影院| 日韩精品一二区| 韩国三级中文字幕hd久久精品| 国产精品一区三区| 国产盗摄精品一区二区三区在线| 国产99久久久精品| 8x福利精品第一导航| 欧美精品久久天天躁| 国产三级久久久| 日韩国产在线观看一区| 亚洲gay无套男同| 国产乱人伦偷精品视频不卡| 国产成人午夜视频| 欧美肥大bbwbbw高潮| 一区二区三区精品在线观看| 成人精品一区二区三区中文字幕| 免费xxxx性欧美18vr| 97精品国产露脸对白| 久久综合色鬼综合色| 国产情人综合久久777777| 蜜桃视频免费观看一区| 欧美日韩国产精品成人| 一区二区三区91| 菠萝蜜视频在线观看一区| 久久精品夜色噜噜亚洲a∨| 麻豆精品视频在线观看视频| 欧美日韩免费不卡视频一区二区三区| 欧美日韩久久一区| 日韩美女在线视频| 国产日产欧产精品推荐色| 国产自产2019最新不卡| 成人性生交大片免费看视频在线| 99精品欧美一区二区蜜桃免费| 国产日韩精品一区| 国产福利一区在线观看| 91麻豆成人久久精品二区三区| 欧美极品美女视频| 香蕉加勒比综合久久 | 欧美一区二区三区公司| 日韩精品电影一区亚洲| 正在播放亚洲一区| 免费看日韩精品| av在线不卡电影| 综合婷婷亚洲小说| av在线一区二区三区| 中文字幕在线免费不卡| 国产成人aaa| 国产精品第一页第二页第三页| 亚洲成人动漫在线观看| 成人精品在线视频观看| 综合久久国产九一剧情麻豆| 99精品视频一区二区三区| 精品国产精品网麻豆系列| 国产精品一区二区你懂的| 国产精品国产三级国产| 久久国产精品第一页| 色婷婷av一区二区| 日本一区二区三区四区在线视频| 成人做爰69片免费看网站| 777欧美精品| 亚洲欧洲av在线| 久草中文综合在线| 国产精品成人一区二区三区夜夜夜| 麻豆精品一区二区av白丝在线| 欧美亚洲禁片免费| 一色桃子久久精品亚洲| 国产91精品在线观看| 亚洲电影一级黄| 精品国产伦一区二区三区免费| 国产精品一级在线| 久久久久久久综合日本| 91网址在线看| 美腿丝袜在线亚洲一区| 欧美色精品在线视频| 激情六月婷婷综合| 欧美人狂配大交3d怪物一区 | 26uuu色噜噜精品一区| 本田岬高潮一区二区三区| 亚州成人在线电影| 91极品视觉盛宴| 一区二区三区国产| 久久九九久久九九| 欧美亚洲尤物久久| 国产一区二区三区在线观看精品| 欧美一三区三区四区免费在线看| 国产精品正在播放| 国产亚洲综合色| 99久久综合国产精品| 久久久久久日产精品| 久久99九九99精品| 天天色综合天天| ...av二区三区久久精品| 不卡的电影网站| 久久激情综合网| 五月天亚洲婷婷| 亚洲日本丝袜连裤袜办公室| 欧美大白屁股肥臀xxxxxx| 免费观看在线色综合| 亚洲一区二区精品视频| 欧美视频一二三区| 亚洲成av人片一区二区三区 | 亚洲精品一二三区| 欧美在线观看18| 五月综合激情日本mⅴ| 欧美日韩国产系列| 美国一区二区三区在线播放| 69久久夜色精品国产69蝌蚪网| 色哟哟在线观看一区二区三区| 亚洲品质自拍视频| 欧美久久一二区| 色噜噜久久综合| 91一区一区三区|