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

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

?? kernel.asm

?? 《自己動(dòng)手寫操作系統(tǒng)》的隨書附贈(zè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 中有說明):
	;              ┃                                    ┃
	;              ┃                 ...                ┃
	;              ┣━━━━━━━━━━━━━━━━━━┫
	;              ┃■■■■■■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)中斷的過程中會(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


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品电影一区二区三区| 亚洲chinese男男1069| 欧美日韩国产区一| 国产999精品久久久久久绿帽| 午夜免费欧美电影| 国产精品久久久久aaaa| 欧美一级理论片| 欧美制服丝袜第一页| 国产.欧美.日韩| 五月婷婷久久丁香| 又紧又大又爽精品一区二区| 国产免费成人在线视频| 日韩一级高清毛片| 欧美日韩极品在线观看一区| 成人app软件下载大全免费| 美日韩一区二区三区| 一区二区三区加勒比av| 国产精品传媒入口麻豆| 国产亚洲欧洲997久久综合| 欧美一级日韩不卡播放免费| 欧亚一区二区三区| 色综合天天综合狠狠| 成人免费视频app| 国产成人av一区二区三区在线| 日本va欧美va精品| 三级亚洲高清视频| 天堂va蜜桃一区二区三区漫画版| 一区二区三区在线不卡| 亚洲精品日日夜夜| 亚洲人成精品久久久久久| 中文字幕一区二区三区四区| 国产农村妇女精品| 国产欧美精品国产国产专区| 久久久不卡影院| 欧美激情一二三区| 国产精品污www在线观看| 久久综合久久综合亚洲| 精品国产一区久久| 精品美女一区二区三区| 欧美一级在线视频| 欧美一级日韩免费不卡| 日韩视频免费观看高清在线视频| 欧美一级欧美三级在线观看 | 偷偷要91色婷婷| 香蕉成人啪国产精品视频综合网| 五月激情六月综合| 日韩电影在线一区二区| 久久99国产精品免费网站| 精品无人码麻豆乱码1区2区 | 国产欧美一区二区三区网站| 久久女同精品一区二区| 国产网站一区二区| 综合激情网...| 一区二区三区四区不卡在线| 五月天亚洲婷婷| 久久99久久99| 成人美女在线视频| 色婷婷亚洲婷婷| 欧美绝品在线观看成人午夜影视| 在线电影一区二区三区| 日韩精品一区二区三区四区| 337p粉嫩大胆噜噜噜噜噜91av | 2024国产精品视频| 国产日产亚洲精品系列| 国产精品美女视频| 亚洲精品高清在线| 日韩二区三区四区| 高清成人在线观看| 色综合久久久久综合体桃花网| 欧美夫妻性生活| 国产午夜精品美女毛片视频| 1000精品久久久久久久久| 日韩黄色免费电影| 国产999精品久久| 色欧美88888久久久久久影院| 欧美疯狂做受xxxx富婆| 国产区在线观看成人精品| 亚洲黄色片在线观看| 久久国产人妖系列| 91亚洲国产成人精品一区二三| 欧美日本免费一区二区三区| 久久女同精品一区二区| 伊人一区二区三区| 国精产品一区一区三区mba视频| 91免费版在线看| 2020日本不卡一区二区视频| 亚洲日本丝袜连裤袜办公室| 日本中文在线一区| 92精品国产成人观看免费 | 精品国产污污免费网站入口 | 欧美日韩一区高清| 久久先锋资源网| 亚洲在线视频免费观看| 国产在线日韩欧美| 欧美天堂一区二区三区| 亚洲国产成人午夜在线一区 | 国产一区二区免费在线| 日本韩国欧美在线| 国产欧美日韩激情| 久久国内精品视频| 欧美三级在线视频| 亚洲柠檬福利资源导航| 国产精品自拍毛片| 欧美日韩卡一卡二| 亚洲男人电影天堂| 成人免费av网站| 久久女同精品一区二区| 三级精品在线观看| 欧美性色综合网| 亚洲天天做日日做天天谢日日欢 | 婷婷夜色潮精品综合在线| 成a人片国产精品| 精品国产乱码久久久久久1区2区| 亚洲影视在线观看| 91首页免费视频| 中文字幕在线播放不卡一区| 韩国午夜理伦三级不卡影院| 正在播放亚洲一区| 亚洲精品久久久蜜桃| 99久久免费精品| 国产精品区一区二区三区| 国产精品99久久久久久久女警 | 99国产精品久久久久久久久久| 精品美女一区二区| 久久aⅴ国产欧美74aaa| 5566中文字幕一区二区电影| 亚洲国产精品尤物yw在线观看| 91社区在线播放| 亚洲另类色综合网站| 日本久久精品电影| 亚洲三级免费电影| 91福利区一区二区三区| 一区二区视频免费在线观看| 91在线你懂得| 1024亚洲合集| 色久优优欧美色久优优| 亚洲午夜久久久久久久久电影院| 在线视频国产一区| 亚洲国产精品一区二区www| 欧美三级电影网| 日本中文一区二区三区| 日韩精品一区二区三区视频| 国产在线一区二区综合免费视频| 精品国产91乱码一区二区三区| 韩日欧美一区二区三区| 久久影院视频免费| 风间由美性色一区二区三区| 国产精品家庭影院| 91免费视频网| 午夜婷婷国产麻豆精品| 91精品国产麻豆| 久久er精品视频| 欧美极品少妇xxxxⅹ高跟鞋| 99精品国产99久久久久久白柏| 亚洲欧美aⅴ...| 欧美人伦禁忌dvd放荡欲情| 久久99国产精品成人| 国产欧美精品一区二区三区四区| 97久久精品人人做人人爽| 亚洲高清免费视频| 日韩精品中午字幕| 成人av片在线观看| 一区二区三区在线影院| 这里只有精品视频在线观看| 国产激情一区二区三区四区| 亚洲精品大片www| 91精品福利在线一区二区三区| 国产一级精品在线| 中文字幕日韩欧美一区二区三区| 欧美三级中文字幕在线观看| 国内外成人在线| 亚洲精品欧美专区| 欧美mv日韩mv亚洲| 91在线porny国产在线看| 视频一区视频二区在线观看| 国产色产综合产在线视频| 在线观看区一区二| 国产在线精品一区二区夜色 | 久久久99精品免费观看不卡| 99久久精品费精品国产一区二区| 日韩在线一二三区| 中文字幕+乱码+中文字幕一区| 欧美午夜片在线看| 国产一区久久久| 亚洲电影一区二区| 国产日韩欧美精品在线| 欧美精品一卡两卡| 成人a免费在线看| 蜜臀av一区二区在线免费观看| 亚洲欧美自拍偷拍| 日韩午夜在线影院| 欧美性xxxxxx少妇| 成人免费看视频| 美女脱光内衣内裤视频久久网站| 亚洲婷婷综合久久一本伊一区| 精品日韩欧美在线| 欧美视频一区在线观看| 成人av网在线| 国产精品综合在线视频| 琪琪一区二区三区|