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

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

?? kernel.asm

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

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


%include "sconst.inc"

; 導入函數
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
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	; 導出 _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:
	; 此時內存看上去是這樣的(更詳細的內存情況在 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		; 在此函數中改變了gdt_ptr,讓它指向新的GDT
	lgdt	[gdt_ptr]	; 使用新的GDT

	lidt	[idt_ptr]

	jmp	SELECTOR_KERNEL_CS:csinit
csinit:		; “這個跳轉指令強制使用剛剛初始化的結構”——<<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)		; ┣ 屏蔽當前中斷
	out	INT_M_CTLMASK, al	; ┛
	mov	al, EOI			; ┓置EOI位
	out	INT_M_CTL, al		; ┛
	sti	; CPU在響應中斷的過程中會自動關中斷,這句之后就允許響應新的中斷
	push	%1			; ┓
	call	[irq_table + 4 * %1]	; ┣ 中斷處理程序
	pop	ecx			; ┛
	cli
	in	al, INT_M_CTLMASK	; ┓
	and	al, ~(1 << %1)		; ┣ 恢復接受當前中斷
	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 = 進程表起始地址

	inc	dword [k_reenter]		; k_reenter++;
	cmp	dword [k_reenter], 0		; if(k_reenter ==0)
	jne	.1				; {
	mov	esp, StackTop			;	mov esp, StackTop <-- 切換到內核棧
	push	restart				;	push restart
	jmp	[esi + RETADR - P_STACKBASE]	;	return;
.1:						; } else { 已經在內核棧,不需要再切換
	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


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品免费看| 亚洲一区二区三区激情| 99re在线精品| 精品一区二区三区在线播放视频| 亚洲九九爱视频| 国产精品国产三级国产普通话蜜臀 | 亚洲激情第一区| 国产午夜精品在线观看| 日韩午夜在线观看| 欧美精品欧美精品系列| 日本道精品一区二区三区| 国产一区在线看| 久久99精品久久久久久久久久久久 | 亚洲男人天堂av网| 自拍偷拍亚洲激情| 中文字幕av不卡| 亚洲国产精品精华液2区45| 久久久www成人免费无遮挡大片| 欧美va亚洲va在线观看蝴蝶网| 91麻豆精品国产自产在线| 欧美午夜在线观看| 91国产成人在线| 成年人国产精品| 国产99一区视频免费| 国产一区二区三区免费看| 极品美女销魂一区二区三区 | 欧美日韩国产小视频在线观看| 欧洲精品在线观看| 欧美日韩一区在线观看| 欧美色图片你懂的| 欧美放荡的少妇| 欧美成人乱码一区二区三区| 日韩欧美一二三四区| 欧美精品一区二区不卡 | 亚洲国产激情av| 中文字幕av一区 二区| 国产精品久久久久久久久动漫 | 国产视频一区二区三区在线观看| 久久久久久99久久久精品网站| 久久精品视频免费| 最新国产成人在线观看| 亚洲资源在线观看| 91久久精品网| 欧美精品一卡两卡| 亚洲精品在线网站| 洋洋av久久久久久久一区| 蜜桃久久久久久| 色又黄又爽网站www久久| 91麻豆精品91久久久久同性| 国产精品国产三级国产a| 丝袜亚洲另类丝袜在线| 成人激情视频网站| 日韩一区二区三区视频| 亚洲特级片在线| 久久福利资源站| 欧美色涩在线第一页| 久久精品亚洲乱码伦伦中文| 亚洲国产视频一区二区| 成人午夜碰碰视频| 欧美xxxx在线观看| 亚洲一级不卡视频| 成人丝袜视频网| 精品久久久久久无| 亚洲一卡二卡三卡四卡| 盗摄精品av一区二区三区| 欧美一区二区三区免费观看视频 | 伊人色综合久久天天人手人婷| 麻豆精品精品国产自在97香蕉 | 亚洲激情中文1区| 国产成人精品一区二| 日韩一区二区三区精品视频| 亚洲自拍偷拍av| eeuss鲁一区二区三区| 日韩免费视频一区二区| 亚洲一区二区av在线| 99久久精品国产观看| 久久久久亚洲综合| 久久精品国产免费| 欧美日韩一区二区三区四区| 综合久久久久综合| 大胆欧美人体老妇| 国产亚洲精品超碰| 国产精品自拍av| 精品久久一区二区| 日本美女一区二区三区| 欧美日韩国产高清一区二区三区 | 国产一二精品视频| 欧美成人r级一区二区三区| 日韩精品福利网| 欧美色综合网站| 亚洲国产裸拍裸体视频在线观看乱了 | 激情成人综合网| 欧美一区二区私人影院日本| 亚洲国产综合视频在线观看| 91福利国产成人精品照片| 亚洲精品综合在线| 欧美亚男人的天堂| 亚洲成人高清在线| 欧美视频一区二区在线观看| 一区二区成人在线视频| 色欧美日韩亚洲| 樱桃视频在线观看一区| 91视频国产观看| 一区二区在线免费| 日本道色综合久久| 亚洲国产精品一区二区www在线| 色婷婷狠狠综合| 亚洲国产中文字幕| 91精品国产一区二区三区| 免费久久精品视频| 久久综合九色欧美综合狠狠 | 欧美日韩成人高清| 天天操天天综合网| 欧美一级免费观看| 麻豆精品在线看| 久久久欧美精品sm网站| 成人蜜臀av电影| 一区二区三区在线免费视频| 欧美性三三影院| 免费在线观看精品| 国产亚洲va综合人人澡精品| bt7086福利一区国产| 国产精品久久二区二区| 国产亚洲欧美色| 欧美一区二区网站| 91丨porny丨在线| 国产一区二区在线免费观看| 亚洲成人在线网站| 亚洲欧美另类久久久精品2019| 欧美大黄免费观看| 欧美日韩高清不卡| 91福利视频网站| 91偷拍与自偷拍精品| 成人在线综合网站| 国产suv精品一区二区三区| 久久99深爱久久99精品| 亚洲高清免费观看| 日日夜夜精品视频天天综合网| 一区二区三区日韩| 亚洲午夜在线视频| 尤物视频一区二区| 久久国产精品色| 成人国产精品免费网站| 色婷婷av一区二区| 精品国产伦一区二区三区观看方式 | 67194成人在线观看| 天天亚洲美女在线视频| 欧美丝袜丝交足nylons| 久久精品久久99精品久久| 国产日韩欧美电影| 欧美日韩精品一二三区| 极品尤物av久久免费看| 一区二区三区在线视频播放| 久久中文娱乐网| 欧美午夜精品一区二区蜜桃| 日韩精品一二三四| 成人动漫在线一区| 91在线视频网址| 欧美一卡在线观看| 久久青草欧美一区二区三区| 一区二区三区中文免费| 亚洲激情五月婷婷| 日本不卡的三区四区五区| 福利电影一区二区| 欧美伊人久久久久久午夜久久久久| 欧美一区二区三区喷汁尤物| 久久久久久久久久看片| 91碰在线视频| 丝袜亚洲另类欧美| 国产精品日韩成人| 在线免费观看不卡av| 国产老妇另类xxxxx| 亚洲一卡二卡三卡四卡五卡| 国产精品女同互慰在线看| 91精品国产aⅴ一区二区| 91日韩一区二区三区| 国产高清无密码一区二区三区| 日本免费在线视频不卡一不卡二 | 亚洲一区二区三区四区五区黄| 26uuu亚洲综合色| 91精品国产手机| 欧美三级中文字| 91免费在线视频观看| 高清国产一区二区| 国产真实乱子伦精品视频| 日韩高清国产一区在线| 亚洲第一av色| 亚洲自拍偷拍欧美| 亚洲黄一区二区三区| 日韩一区欧美一区| 日本一区二区电影| 国产婷婷一区二区| 久久亚洲一级片| 精品乱人伦一区二区三区| 日韩欧美在线观看一区二区三区| 欧美日韩免费视频| 欧美午夜电影在线播放| 欧美性受极品xxxx喷水| 在线观看亚洲精品视频| 色哦色哦哦色天天综合|