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

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

?? kernel.asm

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

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


%include "sconst.inc"

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

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

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	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:
	; 此時內(nèi)存看上去是這樣的(更詳細的內(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 代碼的時候一定要保證 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		; 在此函數(shù)中改變了gdt_ptr,讓它指向新的GDT
	lgdt	[gdt_ptr]	; 使用新的GDT

	lidt	[idt_ptr]

	jmp	SELECTOR_KERNEL_CS:csinit
csinit:		; “這個跳轉(zhuǎn)指令強制使用剛剛初始化的結(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
	push	%1
	call	spurious_irq
	add	esp, 4
	hlt
%endmacro


ALIGN	16
hwint00:		; Interrupt routine for irq 0 (the clock).
	sub	esp, 4
	pushad		; ┓
	push	ds	; ┃
	push	es	; ┣ 保存原寄存器值
	push	fs	; ┃
	push	gs	; ┛
	mov	dx, ss
	mov	ds, dx
	mov	es, dx

	mov	esp, StackTop	; 切到內(nèi)核棧

	inc	byte [gs:0]	; 改變屏幕第 0 行, 第 0 列的字符

	mov	al, EOI		; ┓reenable master 8259
	out	INT_M_CTL, al	; ┛

	push	clock_int_msg
	call	disp_str
	add	esp, 4

	mov	esp, [p_proc_ready]	; 離開內(nèi)核棧;

	lea	eax, [esp + P_STACKTOP]
	mov	dword [tss + TSS3_S_SP0], eax

	pop	gs	; ┓
	pop	fs	; ┃
	pop	es	; ┣ 恢復(fù)原寄存器值
	pop	ds	; ┃
	popad		; ┛
	add	esp, 4

	iretd

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


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


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品婷婷伊人一区三区三| 亚洲国产视频网站| 91精品国产一区二区| 色999日韩国产欧美一区二区| 国产成人aaaa| 国产精品资源在线看| 国产一区二区三区久久久 | 日韩欧美国产综合| 欧美一级黄色片| 欧美岛国在线观看| 精品国内片67194| 久久午夜国产精品| 国产精品视频免费看| 国产精品久久久久四虎| 中文字幕一区日韩精品欧美| 亚洲另类色综合网站| 亚洲国产成人va在线观看天堂| 亚洲一二三区在线观看| 日本人妖一区二区| 国产原创一区二区三区| 国产福利不卡视频| av不卡在线播放| 欧美色网站导航| 欧美一区二区二区| 国产亚洲欧美一区在线观看| 国产精品卡一卡二| 亚洲已满18点击进入久久| 水蜜桃久久夜色精品一区的特点| 麻豆专区一区二区三区四区五区| 狠狠色狠狠色综合| 国产乱码精品一区二区三区av| 国产精品一级片| 一本大道久久精品懂色aⅴ| 色呦呦网站一区| 欧美精品99久久久**| 337p粉嫩大胆色噜噜噜噜亚洲| 久久精品免视看| 国产蜜臀av在线一区二区三区| 亚洲日本一区二区三区| 日韩成人精品在线| 成人性生交大片免费| 欧美日本在线观看| 国产婷婷色一区二区三区四区| 亚洲裸体在线观看| 国产乱妇无码大片在线观看| 91精品办公室少妇高潮对白| 26uuu另类欧美亚洲曰本| 亚洲乱码国产乱码精品精小说| 久久99久久99精品免视看婷婷| 91免费观看国产| 精品日韩99亚洲| 亚洲资源在线观看| 国产精品91一区二区| 欧美精品视频www在线观看| 日韩欧美国产麻豆| 亚洲a一区二区| 91麻豆精品一区二区三区| 在线播放国产精品二区一二区四区| 久久精品视频免费| 日本午夜精品视频在线观看| 国产精品一区三区| 日韩女优电影在线观看| 亚洲国产精品麻豆| 欧美亚洲精品一区| ㊣最新国产の精品bt伙计久久| 国内成人自拍视频| 欧美一区二区三区男人的天堂| 一区二区视频在线| 9i看片成人免费高清| 久久久综合精品| 免费在线观看不卡| 欧美日韩亚洲综合一区二区三区 | 国产欧美一区二区精品性色| 日本不卡一区二区三区| 欧美日韩免费观看一区三区| 国产精品成人在线观看| 97久久精品人人做人人爽| 久久精品无码一区二区三区| 精品一二三四区| 日韩精品中文字幕在线不卡尤物 | 99视频有精品| 中文字幕制服丝袜一区二区三区 | 视频一区二区三区入口| 欧美性极品少妇| 日本不卡的三区四区五区| 国产精品18久久久久久久久久久久| 国产成人精品影视| 国产一区二区不卡老阿姨| 美女视频黄频大全不卡视频在线播放| 欧美日韩免费观看一区三区| 亚洲bt欧美bt精品777| 欧美日韩另类国产亚洲欧美一级| 午夜精品久久久久久久蜜桃app| 欧美日韩成人高清| 久久国产生活片100| 亚洲精品在线观看网站| 国产精品996| 亚洲欧洲日本在线| 欧美午夜一区二区三区| 中国色在线观看另类| 91农村精品一区二区在线| 国产精品传媒在线| 欧美日韩国产影片| 蜜桃91丨九色丨蝌蚪91桃色| 欧美精品一区二区在线观看| av影院午夜一区| 亚洲欧美视频一区| 欧美日产国产精品| 国产激情精品久久久第一区二区 | 国产精品伦理一区二区| 91蜜桃在线观看| 蜜桃精品在线观看| 国产精品入口麻豆九色| 在线成人av影院| eeuss鲁片一区二区三区在线看| 亚洲无人区一区| 久久久国际精品| 欧美精品在线一区二区三区| 国产一区二区电影| 亚洲夂夂婷婷色拍ww47| 亚洲国产成人自拍| 欧美日韩成人综合在线一区二区| 国产精品一品二品| 日韩精品电影一区亚洲| 中文字幕中文字幕一区二区| 日韩一区二区三区在线观看| av一区二区三区四区| 国产一区二区三区不卡在线观看 | 国产一区亚洲一区| 亚洲国产视频一区| 国产精品久久久久久久久久久免费看| 欧美二区三区91| 91成人在线免费观看| 成人天堂资源www在线| 精品一区二区在线免费观看| 午夜精品久久久久久不卡8050| 中文字幕亚洲一区二区av在线| 精品国产乱码久久久久久图片 | 亚洲美女视频在线观看| 国产视频911| 精品少妇一区二区三区日产乱码 | 韩国视频一区二区| 奇米精品一区二区三区在线观看一| 国产日韩av一区| 精品国产乱码久久久久久久| 51午夜精品国产| 欧美理论在线播放| 欧洲一区二区三区在线| 91丝袜高跟美女视频| 国产麻豆91精品| 久久99国产精品久久99果冻传媒| 午夜精品久久久久久| 无码av中文一区二区三区桃花岛| 亚洲一二三四久久| 亚洲在线观看免费视频| 亚洲人成网站影音先锋播放| 中文字幕一区二区三区精华液| 国产午夜精品久久久久久久 | 亚洲午夜精品久久久久久久久| 亚洲欧美经典视频| 亚洲蜜臀av乱码久久精品蜜桃| 欧美国产日韩在线观看| 欧美韩国日本一区| 亚洲视频在线一区二区| 亚洲自拍偷拍av| 免费在线观看一区| 国产馆精品极品| 成人黄动漫网站免费app| 99久久亚洲一区二区三区青草| k8久久久一区二区三区| 色综合一区二区三区| 欧美日韩视频在线第一区 | 久久久久久久久岛国免费| 中文天堂在线一区| 日本在线不卡一区| 久久精品国产99国产| 国产电影精品久久禁18| 99re成人在线| 日韩午夜激情视频| 欧美激情综合五月色丁香| 一区二区三区欧美| 理论片日本一区| 成人永久看片免费视频天堂| 色综合久久综合中文综合网| 91福利资源站| 777午夜精品免费视频| 久久久久久99久久久精品网站| 国产欧美日韩视频在线观看| 日韩精品一区二区在线观看| 日本一区二区久久| 性欧美大战久久久久久久久| 精品一区二区在线看| 不卡的av在线| 制服丝袜一区二区三区| 欧美经典一区二区三区| 亚洲日本va午夜在线电影| 免费看欧美美女黄的网站| 99热这里都是精品| 日韩一区二区在线免费观看| 亚洲视频在线一区观看|