亚洲欧美第一页_禁久久精品乱码_粉嫩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	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:
	; 此時內(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
	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在響應(yī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ù)接受當前中斷
	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 <-- 切換到內(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
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区日韩一区二区| 另类小说欧美激情| 久久久久国产精品人| 欧美一区二区三区四区在线观看 | 欧美无人高清视频在线观看| 不卡的av中国片| 91行情网站电视在线观看高清版| 成人性生交大片免费看中文| 成人av免费在线观看| 91麻豆成人久久精品二区三区| 91免费看`日韩一区二区| 91久久国产最好的精华液| 欧美日韩国产小视频| 欧美成人一级视频| 中文字幕一区二区三区在线播放| 亚洲大型综合色站| 国产精品一区久久久久| 精品制服美女久久| 国产精品丝袜一区| 午夜婷婷国产麻豆精品| 亚洲va天堂va国产va久| 青娱乐精品在线视频| voyeur盗摄精品| 欧美三日本三级三级在线播放| 精品三级av在线| 亚洲激情网站免费观看| 国产91清纯白嫩初高中在线观看| 在线中文字幕一区二区| 中文字幕欧美激情一区| 天天综合色天天| 在线观看国产91| 中文字幕在线观看不卡视频| 狠狠狠色丁香婷婷综合激情| 欧美日韩二区三区| 亚洲精品视频在线观看网站| 国产盗摄视频一区二区三区| 91精品国产综合久久精品| 亚洲狠狠丁香婷婷综合久久久| 懂色av中文一区二区三区| 精品人伦一区二区色婷婷| 蜜桃视频第一区免费观看| 欧美日韩一区成人| 偷拍日韩校园综合在线| 欧美色综合网站| 亚洲va韩国va欧美va精品| 日本电影欧美片| 亚洲一区二区精品视频| 在线视频中文字幕一区二区| 日韩一区欧美一区| 色婷婷av一区二区三区gif| 精品日韩欧美在线| 婷婷开心久久网| 日韩免费观看2025年上映的电影| 日本在线不卡视频一二三区| 欧美日韩国产在线观看| 亚洲va国产天堂va久久en| 欧美色精品在线视频| 日韩av一区二区三区| 精品国产1区2区3区| 成人深夜在线观看| 日韩不卡手机在线v区| www国产亚洲精品久久麻豆| 99re这里只有精品视频首页| 亚洲国产精品一区二区久久| 欧美电影免费观看高清完整版在 | 欧美日韩国产一二三| 久久99精品久久只有精品| 国产精品久久久久影院色老大| 一本色道久久综合精品竹菊| 视频一区二区欧美| 欧美极品美女视频| 欧美高清视频一二三区 | 国产精品国产a| 2023国产精品| 91精品婷婷国产综合久久性色 | 国产成人啪免费观看软件| 亚洲精品成a人| 中文字幕乱码久久午夜不卡 | 国产欧美日本一区二区三区| 欧美福利视频导航| 精品视频在线免费看| 国产福利精品导航| 日本最新不卡在线| 日韩综合一区二区| 午夜私人影院久久久久| 亚洲成av人片一区二区梦乃| 国产精品私房写真福利视频| 欧美国产精品久久| 国产精品美女一区二区在线观看| 欧美成人性福生活免费看| 日韩午夜激情av| 欧美美女bb生活片| 91精品在线免费观看| 日韩三级中文字幕| 国产日韩精品一区二区三区在线| 久久免费午夜影院| 久久青草国产手机看片福利盒子 | 极品少妇xxxx精品少妇偷拍| 麻豆国产精品777777在线| 精品一区二区三区影院在线午夜 | 欧美久久久久久蜜桃| 欧美久久久久久久久| 91亚洲精品久久久蜜桃网站| 狠狠色综合色综合网络| zzijzzij亚洲日本少妇熟睡| 欧美中文字幕亚洲一区二区va在线| av在线播放成人| 色婷婷狠狠综合| 555www色欧美视频| 最新国产成人在线观看| 日韩电影免费一区| 91免费观看在线| 欧美va亚洲va香蕉在线| 久久久99精品免费观看不卡| 亚洲欧美日韩在线| 国产呦精品一区二区三区网站| 91影院在线免费观看| 久久亚区不卡日本| 日韩高清在线一区| 色综合视频在线观看| 精品国产123| 日本伊人色综合网| 91麻豆免费看| 国产欧美精品一区二区色综合| 亚洲福利一区二区| 色婷婷精品久久二区二区蜜臀av| 26uuu亚洲| 九九**精品视频免费播放| 欧美在线观看视频一区二区 | 免费观看在线色综合| 欧美日韩专区在线| 亚洲第一成年网| 欧美日韩电影一区| 秋霞影院一区二区| 精品久久久久久久一区二区蜜臀| 亚洲午夜免费电影| 欧美一级片在线观看| 亚洲一区二区三区四区在线| 国产91精品入口| 国产精品灌醉下药二区| 99久久精品情趣| 亚洲午夜久久久久| 制服视频三区第一页精品| 日韩精品每日更新| 日韩午夜电影在线观看| 国产专区欧美精品| 国产精品成人一区二区三区夜夜夜| 国产精品一区二区三区网站| 亚洲视频在线观看一区| 在线看日韩精品电影| 蜜桃久久久久久| 亚洲欧洲无码一区二区三区| 欧美性受xxxx| 国产精品一区二区三区乱码| 亚洲精品中文字幕乱码三区 | 国产日韩欧美a| 欧美日韩激情在线| 成人性视频免费网站| 日韩激情一二三区| 国产精品欧美极品| 91精品国产乱| 欧美三级电影在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲日本成人在线观看| 欧美精品一区二区三区在线 | 欧美精品久久99| av中文字幕亚洲| 国产乱码精品一区二区三区忘忧草| 日韩美女精品在线| 国产精品无遮挡| 日韩一区二区高清| 337p亚洲精品色噜噜噜| 色噜噜偷拍精品综合在线| 成人免费观看av| 国产精品一区二区在线观看不卡 | 91精品国产综合久久香蕉麻豆| 国产精品88888| 成人免费视频网站在线观看| 国模大尺度一区二区三区| 久久机这里只有精品| 奇米精品一区二区三区在线观看| 亚洲免费av在线| 亚洲成av人片一区二区| 首页亚洲欧美制服丝腿| 亚洲成人动漫在线观看| 毛片av一区二区三区| 精品午夜久久福利影院| 国产 日韩 欧美大片| 成人av网在线| 欧美一区二区三区视频在线观看| 91.麻豆视频| 国产日产亚洲精品系列| 欧美午夜寂寞影院| 91麻豆精品91久久久久同性| 欧美变态口味重另类| 国产精品短视频| 日韩精品国产精品| 成人精品国产福利| 这里是久久伊人| 日本一区二区不卡视频|