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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? kernel.asm

?? 最最最雛形的操作系統(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 中有說(shuō)明):
	;              ┃                                    ┃
	;              ┃                 ...                ┃
	;              ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃■■■■■■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)中斷的過(guò)程中會(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


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合天天综合色综合av| 亚洲国产美女搞黄色| 精品少妇一区二区三区在线视频| 91蜜桃网址入口| 99r精品视频| 欧美日本一区二区| www国产精品av| 亚洲欧美怡红院| 日韩电影一区二区三区四区| 视频一区国产视频| 国产精品1区二区.| 91色视频在线| 欧美一二三区在线观看| 欧美激情一区二区三区蜜桃视频| **网站欧美大片在线观看| 亚洲国产日韩综合久久精品| 韩国v欧美v亚洲v日本v| 成年人国产精品| 欧美一区二区久久| 中文字幕中文在线不卡住| 日韩av不卡一区二区| 成人免费视频一区二区| 欧美一级二级三级蜜桃| 亚洲精品va在线观看| 成人av资源下载| 精品99一区二区| 日韩二区三区四区| 欧美日韩中文另类| 亚洲欧美一区二区不卡| 国产美女视频91| 欧美一区二区观看视频| 亚洲一二三区视频在线观看| 91丨国产丨九色丨pron| 日本一区二区三区久久久久久久久不| 日韩国产欧美在线播放| 欧洲一区在线电影| 香蕉乱码成人久久天堂爱免费| 丁香一区二区三区| 欧美极品美女视频| 粉嫩13p一区二区三区| 国产午夜精品在线观看| 国产伦精品一区二区三区免费| 毛片一区二区三区| 97久久超碰精品国产| 国产激情一区二区三区桃花岛亚洲| 欧美中文字幕一二三区视频| 成人激情av网| 国产高清视频一区| 国产高清不卡二三区| 久久国产精品免费| 蜜桃视频第一区免费观看| 亚洲aaa精品| 日韩成人午夜电影| 蜜桃视频在线观看一区二区| 亚洲成av人片一区二区梦乃 | 丁香天五香天堂综合| 国产一区二区三区观看| 狠狠网亚洲精品| 成人午夜视频网站| 在线观看av一区| 日韩一级完整毛片| 久久精品视频一区二区三区| 久久免费午夜影院| 国产精品福利电影一区二区三区四区| 国产精品欧美经典| 亚洲一区日韩精品中文字幕| 天堂资源在线中文精品| 免费在线一区观看| 91亚洲永久精品| 欧美日韩国产bt| 国产女人aaa级久久久级| 亚洲激情图片一区| 国产乱国产乱300精品| 色噜噜夜夜夜综合网| 欧美成人女星排名| 亚洲三级在线观看| 精品一区二区三区欧美| 91在线国产观看| 久久影院午夜论| 亚洲图片自拍偷拍| 91亚洲精品一区二区乱码| 91精品国产综合久久福利软件| 国产日本欧美一区二区| 日本午夜精品一区二区三区电影| 高清不卡一区二区在线| 在线综合+亚洲+欧美中文字幕| 中文字幕乱码亚洲精品一区| 美女视频黄 久久| 欧美影片第一页| 国产精品久久免费看| 国产综合成人久久大片91| 欧美日韩日本视频| 亚洲一区二区综合| 99视频国产精品| 1024成人网色www| 波多野结衣中文一区| 国产精品水嫩水嫩| 成人毛片在线观看| 亚洲欧洲日韩在线| www.性欧美| 一区二区三区美女视频| 91视频免费看| 亚洲韩国精品一区| 欧美日韩国产一级二级| 午夜视频一区在线观看| 日韩一级片在线播放| 日韩在线卡一卡二| 日韩一区二区三区精品视频| 日韩不卡手机在线v区| 欧美成人精品1314www| 国产一区久久久| 中文字幕在线不卡国产视频| 色综合激情五月| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美一区二区视频在线观看 | 亚洲国产另类av| 日韩西西人体444www| 紧缚捆绑精品一区二区| 国产精品进线69影院| 欧美亚洲动漫制服丝袜| 日本欧美肥老太交大片| 国产亚洲视频系列| 在线日韩av片| 精品亚洲porn| 一区二区三区精密机械公司| 欧美一级高清片| 91九色最新地址| 美女性感视频久久| 樱花影视一区二区| 久久影院午夜论| 宅男噜噜噜66一区二区66| 91丨九色丨蝌蚪富婆spa| 久久精品国产一区二区三| 亚洲综合色网站| 中文字幕国产精品一区二区| 欧美一级免费观看| 99re66热这里只有精品3直播| 蜜桃免费网站一区二区三区| 尤物在线观看一区| 国产欧美日韩不卡免费| 日韩精品综合一本久道在线视频| 色欧美日韩亚洲| 99久久综合狠狠综合久久| 国产成人久久精品77777最新版本| 亚洲成人777| 日本一道高清亚洲日美韩| 性欧美大战久久久久久久久| 亚洲国产精品综合小说图片区| 中文字幕一区二区三区色视频| 久久久777精品电影网影网| 欧美v日韩v国产v| 久久久91精品国产一区二区精品 | 精品一区二区在线观看| 麻豆国产精品视频| 精品一区二区三区日韩| 国产在线精品一区二区| 国产一区二区视频在线播放| 国产专区欧美精品| 北条麻妃国产九九精品视频| 91尤物视频在线观看| 一本到高清视频免费精品| 欧美性猛交xxxxxx富婆| 91麻豆精品国产91久久久| 日韩午夜电影在线观看| 久久夜色精品国产噜噜av| 中文字幕一区二区三区精华液| 亚洲免费av网站| 国产一区二区在线看| 99麻豆久久久国产精品免费| 制服丝袜av成人在线看| 国产欧美一区二区在线| 亚洲一区二区影院| 国产一区二区精品久久99| 在线观看亚洲a| 国产性天天综合网| 日韩精品91亚洲二区在线观看| 国产精品456| 欧美电影免费观看高清完整版在线 | 色视频一区二区| 久久久一区二区三区捆绑**| 日韩毛片一二三区| 偷拍与自拍一区| 97国产精品videossex| 精品成人在线观看| 午夜电影久久久| 欧美图片一区二区三区| 国产精品热久久久久夜色精品三区| 日日夜夜精品视频免费| eeuss鲁片一区二区三区在线观看| 3d动漫精品啪啪1区2区免费| 亚洲色图都市小说| 94-欧美-setu| 中文字幕不卡在线| 国产乱对白刺激视频不卡| 制服丝袜中文字幕一区| 亚洲永久精品国产| 99re视频精品| 亚洲日本丝袜连裤袜办公室| 菠萝蜜视频在线观看一区| 久久精品一区四区|