亚洲欧美第一页_禁久久精品乱码_粉嫩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
extern	sys_call_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	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:
	; 此時內存看上去是這樣的(更詳細的內存情況在 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	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 <-- 切換到內核棧
	push	restart				;	push restart
	jmp	[esi + RETADR - P_STACKBASE]	;	return;
.1:						; } else { 已經在內核棧,不需要再切換
	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


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久se精品一区二区| 日韩国产精品久久久久久亚洲| 欧美性受xxxx黑人xyx| 国产成+人+日韩+欧美+亚洲| 亚洲h在线观看| 一级特黄大欧美久久久| 亚洲色图制服丝袜| 国产精品久久久久久久久久免费看| 久久丝袜美腿综合| 欧美精品一区二区三区四区| 精品三级av在线| 日韩一区二区三区四区| 欧美一区二区啪啪| 日韩精品一区二区三区视频在线观看| 这里只有精品视频在线观看| 欧美视频一区二| 欧美人动与zoxxxx乱| 91超碰这里只有精品国产| 欧美日韩在线三级| 欧美日韩久久一区二区| 9191国产精品| 日韩精品中文字幕在线一区| 欧美成人一区二区三区片免费 | 国产婷婷色一区二区三区| 精品欧美一区二区三区精品久久| 精品免费日韩av| 久久久久97国产精华液好用吗| 国产午夜精品一区二区三区视频| 中文字幕欧美日韩一区| 日韩伦理免费电影| 天天色天天爱天天射综合| 久88久久88久久久| 成人免费不卡视频| 欧美这里有精品| 欧美大胆人体bbbb| 国产精品蜜臀av| 亚洲电影第三页| 国产麻豆欧美日韩一区| 91污片在线观看| 欧美日韩精品系列| 精品88久久久久88久久久| 国产精品全国免费观看高清 | 色综合久久久久久久| 91免费精品国自产拍在线不卡| 欧美性猛片aaaaaaa做受| 欧美一区二区精品在线| 亚洲国产成人私人影院tom| 亚洲永久免费av| 韩国精品免费视频| 欧洲精品一区二区| 久久综合九色综合97婷婷女人 | 一区二区三区在线不卡| 奇米精品一区二区三区在线观看| 国内精品写真在线观看| 91久久国产最好的精华液| 精品日本一线二线三线不卡| 一区二区三区美女| 国产大片一区二区| 欧美精选在线播放| 亚洲免费在线看| 国产做a爰片久久毛片| 欧美色网一区二区| 国产精品久久久久久久久免费樱桃| 婷婷六月综合网| 97se亚洲国产综合自在线观| 精品av综合导航| 偷窥少妇高潮呻吟av久久免费| 不卡的av网站| 久久久国产精品午夜一区ai换脸| 亚洲福利一区二区三区| 成人听书哪个软件好| 日韩一卡二卡三卡四卡| 亚洲一区二区三区自拍| 99久久精品一区| 2020日本不卡一区二区视频| 午夜av一区二区三区| 91一区在线观看| 欧美国产日韩一二三区| 黑人巨大精品欧美一区| 欧美一级高清片| 亚洲一区二区高清| 色婷婷综合五月| 一区免费观看视频| 国产91色综合久久免费分享| 精品国产一区二区国模嫣然| 麻豆成人av在线| 日韩三级视频中文字幕| 青娱乐精品视频| 日韩一区二区三区在线观看| 日本亚洲欧美天堂免费| 91麻豆精品国产自产在线| 亚洲成人av福利| 欧美日韩dvd在线观看| 亚洲第一搞黄网站| 欧美日韩国产高清一区| 亚洲成av人片www| 欧美人妖巨大在线| 青草国产精品久久久久久| 91麻豆精品国产综合久久久久久| 国产999精品久久久久久绿帽| 2023国产精华国产精品| 国产成人综合精品三级| 中文字幕乱码亚洲精品一区| 成人一级片网址| 一区在线中文字幕| 欧美三级视频在线播放| 日韩专区一卡二卡| 精品国产污污免费网站入口 | 成人av资源下载| 亚洲欧美影音先锋| 欧洲一区二区三区在线| 亚洲国产日韩在线一区模特| 91精品国产色综合久久| 久久成人麻豆午夜电影| 中文字幕免费观看一区| 日本精品裸体写真集在线观看| 亚洲高清视频在线| 亚洲精品在线免费观看视频| 不卡av在线免费观看| 午夜视频在线观看一区二区| 欧美r级在线观看| 成人三级在线视频| 亚洲成人免费在线观看| 久久综合色综合88| 色综合视频在线观看| 蓝色福利精品导航| 亚洲视频一二三区| 日韩视频一区二区三区| 成人av在线观| 日韩精品欧美精品| 国产精品乱人伦一区二区| 欧美精品久久99久久在免费线 | 亚洲一区二区三区爽爽爽爽爽| 日韩欧美色电影| av网站一区二区三区| 日韩av在线免费观看不卡| 国产精品国产三级国产aⅴ原创| 欧美色图12p| 国产91丝袜在线观看| 首页国产欧美久久| 中文字幕乱码日本亚洲一区二区| 欧美日韩电影一区| www.在线欧美| 国产一区二区女| 青青国产91久久久久久| 亚洲精品美国一| 亚洲国产电影在线观看| 日韩视频中午一区| 欧洲一区在线电影| av成人免费在线观看| 国产在线视视频有精品| 日韩高清不卡一区| 亚洲一区二区黄色| 自拍偷拍国产精品| 国产亚洲成av人在线观看导航| 欧美夫妻性生活| 在线免费观看不卡av| 成人av集中营| 成人性生交大片| 国产美女av一区二区三区| 日韩av二区在线播放| 久久精品国产网站| 图片区小说区区亚洲影院| 亚洲柠檬福利资源导航| 国产精品国产自产拍高清av| 欧美国产1区2区| 久久久精品一品道一区| 亚洲精品一区二区三区四区高清| 欧美美女直播网站| 欧美最新大片在线看| 91麻豆精东视频| 成人av午夜电影| 成人黄色一级视频| 成人av电影在线观看| 99re这里只有精品首页| 成人激情视频网站| 91在线免费播放| www.日韩大片| jlzzjlzz亚洲日本少妇| 成人avav影音| 99久久久国产精品| 一本高清dvd不卡在线观看| 一本大道av一区二区在线播放| 一本一道波多野结衣一区二区| 日本久久一区二区三区| 日本韩国视频一区二区| 欧美体内she精高潮| 欧美日韩视频专区在线播放| 91精品国产综合久久久久久漫画| 日韩限制级电影在线观看| 精品国产乱码久久久久久久久 | 国内外成人在线视频| 激情小说欧美图片| 国产福利精品导航| 99久久99久久免费精品蜜臀| 欧美性色aⅴ视频一区日韩精品| 欧美中文字幕一二三区视频| 欧美精品少妇一区二区三区| 欧美videossexotv100| 国产精品欧美一区喷水|