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

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
	push	%1
	call	spurious_irq
	add	esp, 4
	hlt
%endmacro


ALIGN	16
hwint00:		; Interrupt routine for irq 0 (the clock).
	sub	esp, 4
	pushad		; ┓
	push	ds	; ┃
	push	es	; ┣ 保存原寄存器值
	push	fs	; ┃
	push	gs	; ┛
	mov	dx, ss
	mov	ds, dx
	mov	es, dx

	;inc	byte [gs:0]	; 改變屏幕第 0 行, 第 0 列的字符

	mov	al, EOI		; ┓reenable master 8259
	out	INT_M_CTL, al	; ┛

	inc	dword [k_reenter]
	cmp	dword [k_reenter], 0
	jne	.re_enter

	mov	esp, StackTop		; 切到內核棧

	sti

	push	0
	call	clock_handler
	add	esp, 4

	cli

	mov	esp, [p_proc_ready]	; 離開內核棧;
	lldt	[esp + P_LDT_SEL]
	lea	eax, [esp + P_STACKTOP]
	mov	dword [tss + TSS3_S_SP0], eax

.re_enter:	; 如果(k_reenter != 0),會跳轉到這里
	dec	dword [k_reenter]	; k_reenter--;
	pop	gs	; ┓
	pop	fs	; ┃
	pop	es	; ┣ 恢復原寄存器值
	pop	ds	; ┃
	popad		; ┛
	add	esp, 4

	iretd


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


; ====================================================================================
;                                   restart
; ====================================================================================
restart:
	mov	esp, [p_proc_ready]
	lldt	[esp + P_LDT_SEL] 
	lea	eax, [esp + P_STACKTOP]
	mov	dword [tss + TSS3_S_SP0], eax
	pop	gs
	pop	fs
	pop	es
	pop	ds
	popad
	add	esp, 4
	iretd


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人性色生活片免费看爆迷你毛片| 国产 欧美在线| 91年精品国产| 精品国精品国产| 日本 国产 欧美色综合| 99久久国产综合精品麻豆| 欧美不卡视频一区| 另类小说图片综合网| 6080国产精品一区二区| 午夜激情综合网| 日韩精品最新网址| 久久av老司机精品网站导航| 日韩视频在线你懂得| 国产高清一区日本| 亚洲乱码中文字幕| 在线播放/欧美激情| 黑人巨大精品欧美一区| 国产日韩精品一区二区三区在线| 国产精品自拍av| 自拍偷在线精品自拍偷无码专区| 色综合久久中文综合久久牛| 日韩中文字幕麻豆| 日韩视频一区二区三区| 午夜a成v人精品| 国产精品妹子av| 日韩一二三区视频| 欧洲精品在线观看| 日韩欧美激情在线| 麻豆精品一区二区三区| 成人免费小视频| 久久久精品黄色| 欧美日韩成人在线一区| 99精品视频免费在线观看| 看国产成人h片视频| 伊人色综合久久天天| 久久精品一区二区三区不卡| 欧美日韩国产三级| 97成人超碰视| a美女胸又www黄视频久久| 精品一区二区三区在线播放| 亚洲精品五月天| 中文字幕一区二区三区不卡| 久久精品亚洲精品国产欧美| 欧美videos大乳护士334| 欧美三区在线观看| 色女孩综合影院| 欧洲一区二区av| 91一区在线观看| 99riav久久精品riav| 盗摄精品av一区二区三区| 国产精品乱码一区二区三区软件| 日韩欧美一区二区视频| 欧美影视一区在线| 91亚洲精品久久久蜜桃网站| 91在线视频播放地址| 91首页免费视频| 91视频免费看| 欧美亚洲自拍偷拍| 欧美日韩精品是欧美日韩精品| 91麻豆swag| 欧美日韩成人综合在线一区二区| 在线不卡一区二区| 制服丝袜亚洲播放| 久久综合久久综合亚洲| proumb性欧美在线观看| 色老综合老女人久久久| 色妹子一区二区| 欧美三级电影网| 国产午夜一区二区三区| 中文字幕中文字幕在线一区| 亚洲一卡二卡三卡四卡| 男女男精品网站| 一本到一区二区三区| 欧美男人的天堂一二区| 久久久亚洲高清| 午夜影院久久久| 懂色av一区二区夜夜嗨| 欧美性感一区二区三区| 一区二区在线看| av电影一区二区| 欧美日本免费一区二区三区| 久久久噜噜噜久噜久久综合| 午夜精品福利一区二区蜜股av | 91麻豆自制传媒国产之光| 3d动漫精品啪啪1区2区免费 | 粉嫩aⅴ一区二区三区四区| 欧美日韩久久久久久| 亚洲精品国产无天堂网2021| 国产精品一级在线| 精品女同一区二区| 日韩欧美第一区| 日韩成人一区二区| 懂色av一区二区三区免费观看| 3751色影院一区二区三区| 一区二区在线观看不卡| kk眼镜猥琐国模调教系列一区二区| 91精品国产免费久久综合| 秋霞成人午夜伦在线观看| 6080午夜不卡| 国内精品久久久久影院色| 欧美大片在线观看| 精品一区二区三区在线视频| 精品国产凹凸成av人网站| 国产精品888| 久久综合九色综合97婷婷女人 | 成人黄色在线看| 国产精品美女视频| 色综合一个色综合| 一区二区三区毛片| 3d动漫精品啪啪1区2区免费| 久久国产夜色精品鲁鲁99| 精品国产电影一区二区| 不卡在线观看av| 亚洲h精品动漫在线观看| 日韩亚洲欧美在线| 国产精品99久久久久久宅男| 国产精品毛片久久久久久| 91国内精品野花午夜精品| 欧美不卡一区二区三区| 蜜臀国产一区二区三区在线播放| 91精品国产高清一区二区三区蜜臀| 日韩成人一区二区三区在线观看| 精品国产91洋老外米糕| av中文字幕一区| 蜜臀av性久久久久蜜臀aⅴ| 国产婷婷色一区二区三区四区| 在线一区二区视频| 国产精品1024| 天天综合色天天| 亚洲精选一二三| 国产性色一区二区| 欧美成人福利视频| 欧洲一区二区av| 高清国产一区二区| 91亚洲大成网污www| 亚洲成av人片在线观看| 日韩欧美一级片| 欧美一区二区二区| 欧美日韩国产成人在线免费| 成人国产精品免费观看动漫| 极品美女销魂一区二区三区| 久久精品国产亚洲aⅴ| 日韩电影在线免费| 日韩国产欧美在线视频| 午夜av电影一区| 亚洲成人动漫一区| 亚洲成人三级小说| 日韩精品一卡二卡三卡四卡无卡| 亚洲精品乱码久久久久久| 亚洲一区二区av在线| 日日摸夜夜添夜夜添国产精品 | 午夜精品在线视频一区| 亚洲一线二线三线久久久| 亚洲一区视频在线| 无吗不卡中文字幕| 日本三级亚洲精品| 免费在线观看视频一区| 国产在线一区观看| 成人在线视频一区二区| 99精品国产91久久久久久| 在线免费观看日本一区| 欧美一区在线视频| 久久久久久久国产精品影院| 中文无字幕一区二区三区| 18欧美亚洲精品| 日韩av电影免费观看高清完整版 | thepron国产精品| 精品欧美久久久| 国产精品五月天| 亚洲一区二区三区影院| 美女mm1313爽爽久久久蜜臀| 久久不见久久见免费视频1| 成人av资源站| 欧美电影免费观看高清完整版在线观看 | 国产曰批免费观看久久久| 国产在线日韩欧美| 91免费视频大全| 日韩一区二区麻豆国产| 国产精品久久久久一区二区三区| 日韩va欧美va亚洲va久久| 成人黄色免费短视频| 日韩欧美一区二区免费| 亚洲乱码精品一二三四区日韩在线| 99麻豆久久久国产精品免费| 日韩午夜av电影| 性做久久久久久免费观看| 高清av一区二区| 久久在线观看免费| 日韩黄色一级片| 欧美在线观看视频在线| 亚洲欧洲日韩一区二区三区| 国产高清成人在线| 日韩欧美的一区| 韩国女主播一区二区三区| 91精品国产麻豆| 男男成人高潮片免费网站| 欧美一区二区三区视频| 亚洲电影视频在线| 91.成人天堂一区| 午夜激情久久久|