亚洲欧美第一页_禁久久精品乱码_粉嫩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

bits 32

[SECTION .data]
clock_int_msg		db	"^", 0

[SECTION .bss]
StackSpace		resb	2 * 1024
StackTop:		; 棧頂

[section .text]	; 代碼在此

global _start	; 導出 _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:
	; 此時內存看上去是這樣的(更詳細的內存情況在 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	eax, esp			; eax = 進程表起始地址

	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	[eax + RETADR - P_STACKBASE]	;	return;
.1:						; } else { 已經在內核棧,不需要再切換
	push	restart_reenter			;	push restart_reenter
	jmp	[eax + RETADR - P_STACKBASE]	;	return;
						; }


; ====================================================================================
;                                   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一区二区三区免费野_久草精品视频
欧美人妇做爰xxxⅹ性高电影| 国产一区二区三区不卡在线观看| 色综合久久综合网| ●精品国产综合乱码久久久久| 国产美女av一区二区三区| 久久精品欧美一区二区三区不卡 | 国产精品影视在线观看| 久久视频一区二区| 国产精品一区二区黑丝| 中文字幕一区二区三| 91看片淫黄大片一级在线观看| 亚洲欧美另类小说视频| 欧美日韩免费视频| 久久精品免费看| 国产欧美一区二区三区在线看蜜臀 | 亚洲色图在线视频| 欧美三区在线观看| 久草精品在线观看| 国产精品国产成人国产三级| 91电影在线观看| 男人的j进女人的j一区| 久久久亚洲午夜电影| 91在线视频播放地址| 五月婷婷久久综合| 久久免费视频色| 色视频一区二区| 麻豆传媒一区二区三区| 国产精品国产三级国产普通话蜜臀| 91麻豆国产香蕉久久精品| 首页欧美精品中文字幕| 久久精品欧美日韩| 欧美日韩高清在线播放| 国产毛片精品视频| 亚洲综合色噜噜狠狠| 欧美精品一区二区三区高清aⅴ | 青青草视频一区| 国产精品色一区二区三区| 欧美揉bbbbb揉bbbbb| 国产精品亚洲一区二区三区妖精 | 欧美日韩一区国产| 国产精品自在欧美一区| 亚洲第一在线综合网站| 国产精品美女久久久久久久久久久| 欧美色图激情小说| 成人午夜视频在线观看| 日韩—二三区免费观看av| 日韩毛片视频在线看| 久久久久久免费网| 91精品国产高清一区二区三区蜜臀| av成人老司机| 国产高清一区日本| 美女视频第一区二区三区免费观看网站| 国产精品国产三级国产三级人妇| 精品国产伦理网| 777色狠狠一区二区三区| 色一情一乱一乱一91av| 不卡视频在线观看| 国产不卡视频在线播放| 精品无人码麻豆乱码1区2区| 日韩电影在线观看电影| 亚洲第一主播视频| 一级精品视频在线观看宜春院| 国产精品九色蝌蚪自拍| 国产午夜精品一区二区三区嫩草| 在线播放中文一区| 欧美日韩精品欧美日韩精品| 欧美综合在线视频| 在线免费观看日本一区| 一本色道亚洲精品aⅴ| 东方aⅴ免费观看久久av| 国产精品一品视频| 国产剧情一区二区三区| 国产一区二区视频在线| 国内精品伊人久久久久影院对白| 日本欧美加勒比视频| 日欧美一区二区| 午夜国产精品影院在线观看| 婷婷夜色潮精品综合在线| 亚洲电影一区二区三区| 亚洲国产日韩av| 亚洲成人精品影院| 日韩av不卡在线观看| 裸体一区二区三区| 激情综合五月天| 国产精品中文有码| 不卡的看片网站| 91伊人久久大香线蕉| 色老头久久综合| 欧美三级资源在线| 91精品久久久久久久99蜜桃| 日韩视频中午一区| 久久亚洲一区二区三区四区| 国产午夜久久久久| 亚洲裸体在线观看| 亚洲.国产.中文慕字在线| 日本成人在线一区| 国产精品中文有码| 日本高清不卡aⅴ免费网站| 欧美人伦禁忌dvd放荡欲情| 日韩一区二区麻豆国产| 久久一日本道色综合| 综合婷婷亚洲小说| 天天色天天爱天天射综合| 久久国产麻豆精品| 成人免费视频网站在线观看| 欧美在线free| 日韩欧美中文字幕精品| 国产欧美久久久精品影院| 亚洲精品免费视频| 日本不卡一区二区三区高清视频| 国产高清在线精品| 欧美一a一片一级一片| 欧美精品一区二区三区蜜臀| 亚洲精品福利视频网站| 免费看日韩a级影片| 99re视频精品| 精品久久久久久亚洲综合网| 国产精品传媒视频| 久久精品国产秦先生| 成人精品小蝌蚪| 91精品国产一区二区三区蜜臀 | 91理论电影在线观看| 日韩欧美激情在线| 亚洲日本在线看| 国内精品嫩模私拍在线| 欧美亚洲另类激情小说| 精品精品国产高清a毛片牛牛| 日韩毛片视频在线看| 精品一区二区免费视频| 91福利国产成人精品照片| 久久精品一区二区三区不卡牛牛| 亚洲曰韩产成在线| 国产很黄免费观看久久| 91精品国产91热久久久做人人 | 成人亚洲一区二区一| 欧美亚洲图片小说| 国产精品久久久久久久裸模| 男男成人高潮片免费网站| 一本色道久久综合狠狠躁的推荐| 久久欧美一区二区| 青青草97国产精品免费观看无弹窗版| 91亚洲精品久久久蜜桃网站| 精品成人免费观看| 日韩中文字幕麻豆| 在线观看av不卡| 国产精品久久久久久久久果冻传媒| 捆绑调教一区二区三区| 欧美色图免费看| 一区二区三区四区视频精品免费 | 95精品视频在线| 国产女人水真多18毛片18精品视频 | 免费久久99精品国产| 91久久久免费一区二区| 国产精品理论片| 国产99久久久国产精品免费看| 日韩美女天天操| 免费一级欧美片在线观看| 欧美图区在线视频| 1024亚洲合集| 91免费国产在线观看| 国产精品久久久久一区| 9i在线看片成人免费| 国产精品传媒入口麻豆| 成人午夜激情在线| 国产日韩成人精品| 成人精品鲁一区一区二区| 中文字幕av一区二区三区高| 国产激情偷乱视频一区二区三区| 久久色中文字幕| 成人一区在线看| 中文字幕免费观看一区| 成人午夜大片免费观看| 中文字幕精品一区| 91农村精品一区二区在线| 亚洲另类春色校园小说| 欧美三级中文字幕在线观看| 日韩制服丝袜先锋影音| 欧美videos大乳护士334| 国产麻豆视频一区| 1000部国产精品成人观看| 色激情天天射综合网| 亚洲香肠在线观看| 91精品麻豆日日躁夜夜躁| 狠狠色狠狠色综合| 国产精品第一页第二页第三页| 日本精品视频一区二区| 婷婷久久综合九色综合绿巨人| 欧美一区二区在线播放| 国产精品一二三在| 日韩一区在线播放| 欧美人狂配大交3d怪物一区| 经典一区二区三区| 亚洲欧洲性图库| 欧美日韩精品一区视频| 国产在线观看一区二区| 亚洲视频综合在线| 777亚洲妇女| 国产成a人亚洲| 亚洲成人一区二区在线观看| 久久青草国产手机看片福利盒子|