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

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

?? kernel.asm

?? === ==== 關(guān)于本光盤 ========== Tinix: 書中所附代碼 其中很多目錄中除了包含源代碼(*.asm, *.inc, *.c, *.h)外
?? 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
	call	save
	in	al, INT_S_CTLMASK	; ┓
	or	al, (1 << (%1 - 8))	; ┣ 屏蔽當(dāng)前中斷
	out	INT_S_CTLMASK, al	; ┛
	mov	al, EOI			; ┓置EOI位
	out	INT_S_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_S_CTLMASK	; ┓
	and	al, ~(1 << (%1 - 8))	; ┣ 恢復(fù)接受當(dāng)前中斷
	out	INT_S_CTLMASK, al	; ┛
	ret
%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	fs, 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

	push	dword [p_proc_ready]

	sti

	push	ecx
	push	ebx
	call	[sys_call_table + eax * 4]
	add	esp, 4 * 3

	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一区二区三区免费野_久草精品视频
色嗨嗨av一区二区三区| 日本特黄久久久高潮| 国产成人av福利| 亚洲精品一区二区三区福利 | 午夜激情综合网| av电影在线观看一区| 日韩美女一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 国产成人免费视频精品含羞草妖精| 欧美日韩精品电影| 亚洲精品成人在线| 91蜜桃在线免费视频| 国产精品色在线观看| www.视频一区| 悠悠色在线精品| 欧美做爰猛烈大尺度电影无法无天| 中文字幕一区日韩精品欧美| 99re成人精品视频| 亚洲女同女同女同女同女同69| 99精品1区2区| 亚洲一区二区av电影| 日本精品免费观看高清观看| 亚洲青青青在线视频| 欧洲av一区二区嗯嗯嗯啊| 亚洲五月六月丁香激情| 91精品欧美综合在线观看最新| 精品一区二区免费在线观看| 日韩精品一区二区三区视频在线观看| 蜜臀99久久精品久久久久久软件| 精品日韩在线一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩精品一区二区三区三区免费| 国产一区二区0| 亚洲视频 欧洲视频| 欧美日韩欧美一区二区| 国产传媒欧美日韩成人| 亚洲精品亚洲人成人网| 日韩一区二区免费在线电影| 国产一区二区在线电影| 日韩电影在线一区| 成人黄色大片在线观看| 亚洲123区在线观看| 久久久www成人免费无遮挡大片| 91视频精品在这里| 国产综合久久久久久久久久久久| 亚洲欧洲精品天堂一级| 欧美精品一区二区三区很污很色的| 一本一道久久a久久精品| 国产做a爰片久久毛片| 丝袜诱惑亚洲看片| 成人免费在线播放视频| 国产色一区二区| 日韩一区二区在线观看视频| 色综合久久久久网| 成人91在线观看| 成人免费黄色大片| 国产一区二区美女| 经典一区二区三区| 蜜桃久久精品一区二区| 亚洲午夜久久久久久久久久久| 国产精品国产三级国产aⅴ中文| 欧美大片一区二区| 日韩午夜在线影院| 欧美男男青年gay1069videost| 97精品久久久久中文字幕| 国产999精品久久久久久绿帽| 久久97超碰国产精品超碰| 美女视频黄 久久| 蜜桃av一区二区| 日本欧美一区二区三区乱码| 亚洲不卡在线观看| 日韩av网站免费在线| 日韩av午夜在线观看| 麻豆成人久久精品二区三区红| 婷婷亚洲久悠悠色悠在线播放| 首页亚洲欧美制服丝腿| 亚洲最色的网站| 国产精品视频线看| 免费观看成人av| 91麻豆视频网站| 精品国产乱码久久久久久影片| 亚洲综合在线第一页| 美女脱光内衣内裤视频久久网站 | 久久精品亚洲精品国产欧美kt∨| 亚洲欧美怡红院| 国产精品自拍网站| 91精品欧美一区二区三区综合在| 国产精品美女久久福利网站| 精品一区二区三区在线播放视频 | 欧美手机在线视频| 日韩欧美国产成人一区二区| 国产精品白丝在线| 午夜精品一区二区三区电影天堂 | 久久久国产精品麻豆 | 99国产精品一区| 欧美一区二区三区免费视频| 国产精品久久久久久福利一牛影视 | 久久精品欧美日韩| 欧美亚洲综合一区| 91久久精品一区二区| 91精品国产综合久久久久久漫画 | 国产精品伦一区| 亚洲午夜电影在线| 国产91清纯白嫩初高中在线观看| 欧美无砖砖区免费| 国产亚洲成av人在线观看导航 | 一区二区三区免费在线观看| 日本中文字幕一区二区视频 | 日韩午夜在线播放| 亚洲天堂久久久久久久| 国产激情视频一区二区在线观看 | 99久免费精品视频在线观看| 26uuu成人网一区二区三区| 亚洲一区二区三区四区五区黄| 国产suv精品一区二区6| 日韩一区二区高清| 亚洲国产成人91porn| 91色.com| 亚洲天堂中文字幕| 成人开心网精品视频| 国产欧美日韩在线看| 极品销魂美女一区二区三区| 91精品国产高清一区二区三区蜜臀 | av一区二区三区| 欧美激情一区二区三区全黄| 国产成人在线视频网址| 国产亚洲午夜高清国产拍精品 | 日韩精品电影在线| 欧美日韩在线三级| 三级精品在线观看| 3d动漫精品啪啪| 极品少妇xxxx精品少妇| 久久亚洲综合色| 成人理论电影网| 亚洲日本一区二区| 国产精品99久| 中文字幕电影一区| 色婷婷综合久久久中文字幕| 亚洲精品伦理在线| 欧美一区二区三区在线观看| 麻豆精品国产传媒mv男同| 欧美精品一区二区精品网| 国产成人av电影在线| 亚洲天堂av一区| 欧美日韩国产免费一区二区| 蜜桃精品在线观看| 国产精品女主播av| 日本黄色一区二区| 精品伊人久久久久7777人| 日本一区二区免费在线观看视频| 色婷婷久久久久swag精品| 日韩精品每日更新| 亚洲精品免费在线观看| 69成人精品免费视频| 国产精品羞羞答答xxdd| 亚洲主播在线播放| 精品日韩在线观看| 色综合久久久久久久久久久| 美美哒免费高清在线观看视频一区二区 | 奇米色777欧美一区二区| 欧美激情综合五月色丁香小说| 在线精品观看国产| 国产精品1区二区.| 日韩av电影天堂| 日韩一区在线免费观看| 欧美精品一区二| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 久久se精品一区精品二区| 一区二区免费看| 亚洲视频一区在线| 国产精品久久久久久久久免费桃花 | 日韩av一区二区在线影视| 一区二区三区在线影院| 国产精品国产三级国产普通话蜜臀 | 久久aⅴ国产欧美74aaa| 午夜精品123| 亚洲国产精品天堂| 亚洲小说欧美激情另类| 一区二区三区在线视频观看| 日韩美女啊v在线免费观看| 日本一区二区成人在线| 国产欧美日韩另类一区| 中文一区在线播放| 欧美激情一区二区三区四区| 精品日韩一区二区三区免费视频| 欧美一区二区三区在线视频| 欧美一级在线免费| 精彩视频一区二区三区| 国产午夜三级一区二区三| 亚洲在线成人精品| 精品一区二区三区蜜桃| 色久优优欧美色久优优| 欧美另类久久久品| 91精品国产一区二区三区蜜臀| 国产日产精品一区| 日韩综合小视频| 91免费国产在线观看| 久久夜色精品一区| 视频一区二区三区中文字幕| 成人动漫一区二区在线|