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

; 導(dǎo)入全局變量
extern	gdt_ptr
extern	idt_ptr
extern	p_proc_ready
extern	tss
extern	disp_pos

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	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
	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

	mov	esp, StackTop	; 切到內(nèi)核棧

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

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

	push	clock_int_msg
	call	disp_str
	add	esp, 4

	mov	esp, [p_proc_ready]	; 離開內(nèi)核棧;

	lea	eax, [esp + P_STACKTOP]
	mov	dword [tss + TSS3_S_SP0], eax

	pop	gs	; ┓
	pop	fs	; ┃
	pop	es	; ┣ 恢復(fù)原寄存器值
	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


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲自拍偷拍图区| 欧美性生活一区| 精品对白一区国产伦| 久久99久久精品欧美| 2023国产一二三区日本精品2022| 韩国欧美国产1区| 久久女同精品一区二区| 成人精品在线视频观看| 亚洲婷婷综合色高清在线| 色综合网站在线| 图片区日韩欧美亚洲| 日韩一级成人av| 国产不卡视频一区| 亚洲一区自拍偷拍| 久久亚洲欧美国产精品乐播| 成人中文字幕在线| 亚洲一区二区精品3399| 日韩一二三四区| 成人午夜碰碰视频| 午夜精品福利视频网站| 精品国产区一区| 91麻豆国产自产在线观看| 天天av天天翘天天综合网| 91精品蜜臀在线一区尤物| 国产乱理伦片在线观看夜一区| 中文字幕日韩一区二区| 欧美日韩日日骚| 国产乱码精品一区二区三区av| 中文字幕一区二区日韩精品绯色| 欧美美女直播网站| 国产精品一二三四区| 一区二区三区波多野结衣在线观看| 欧美一区二区视频免费观看| 成人一区二区在线观看| 亚洲欧洲美洲综合色网| 成人三级伦理片| 欧美福利视频导航| 综合欧美亚洲日本| 国产精一品亚洲二区在线视频| 91麻豆高清视频| 国产人妖乱国产精品人妖| 久久精品二区亚洲w码| 欧美日韩视频一区二区| 日本一区二区在线不卡| 国产美女视频91| 久久久久久9999| 麻豆免费看一区二区三区| 欧美一区二区免费观在线| 亚洲超丰满肉感bbw| 欧美日韩精品欧美日韩精品一| 日韩中文字幕91| 欧美三级视频在线观看 | 国产乱国产乱300精品| 亚洲精品videosex极品| 日韩一区二区中文字幕| 欧美日韩一区二区在线观看视频| 成人激情免费电影网址| 日韩 欧美一区二区三区| 欧美猛男gaygay网站| 国产精品初高中害羞小美女文| 亚洲三级免费观看| www.66久久| 亚洲与欧洲av电影| 开心九九激情九九欧美日韩精美视频电影 | 欧美国产日本视频| 97久久精品人人澡人人爽| 美腿丝袜亚洲色图| 亚洲va韩国va欧美va精品| 亚洲乱码一区二区三区在线观看| 7777精品伊人久久久大香线蕉的| 色综合久久综合中文综合网| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲免费资源在线播放| 久久久精品中文字幕麻豆发布| 91麻豆精品国产91久久久久| 成人精品国产一区二区4080| 麻豆精品视频在线| 手机精品视频在线观看| 亚洲一区免费观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 日韩欧美一区二区视频| 91亚洲国产成人精品一区二区三| 韩国一区二区在线观看| 久久av中文字幕片| 免费美女久久99| 日韩高清不卡一区二区三区| 亚洲精品国产精华液| 一区二区三区中文字幕电影 | 色综合网色综合| 成人毛片视频在线观看| 国产精品一色哟哟哟| 国产一级精品在线| 激情综合网激情| 精品一区中文字幕| 国产精品一级二级三级| 成人夜色视频网站在线观看| 国产不卡在线播放| 福利电影一区二区| 成人午夜精品一区二区三区| 粉嫩久久99精品久久久久久夜| 国产v综合v亚洲欧| 成人激情动漫在线观看| 成人福利视频在线| 91网站在线播放| 欧美三级中文字| 欧美成人艳星乳罩| 久久久久国色av免费看影院| 国产欧美综合色| 中文字幕日韩精品一区| 亚洲精品国产一区二区精华液 | 91麻豆免费观看| 欧美日韩午夜精品| 91精品久久久久久蜜臀| 日韩欧美在线不卡| 国产亚洲欧美在线| 亚洲精品国产一区二区精华液 | 久久精品99国产精品日本| 国产一区二区三区av电影| 懂色一区二区三区免费观看| 色成人在线视频| 337p亚洲精品色噜噜狠狠| 久久免费视频一区| 中文字幕一区二区三区蜜月| 午夜精品一区二区三区三上悠亚| 午夜久久久影院| 日本特黄久久久高潮| 国产在线精品国自产拍免费| 波波电影院一区二区三区| 欧美色综合天天久久综合精品| 日韩精品综合一本久道在线视频| 中文在线资源观看网站视频免费不卡| 中文字幕在线不卡一区二区三区| 首页国产欧美日韩丝袜| 丰满少妇在线播放bd日韩电影| 色婷婷av一区二区三区软件| 欧美tickling网站挠脚心| 中文字幕在线不卡国产视频| 亚洲第一主播视频| 久久99精品国产91久久来源| 99久久久久久| 欧美成人精品福利| 一区二区三区资源| 国产美女精品人人做人人爽| 在线观看亚洲精品| 国产欧美日本一区视频| 午夜精品视频在线观看| 日韩电影在线观看电影| 99精品黄色片免费大全| 欧美精品免费视频| 亚洲视频免费观看| 国产乱人伦偷精品视频不卡| 在线观看日韩av先锋影音电影院| 久久综合九色综合欧美就去吻 | 91国产丝袜在线播放| 精品电影一区二区三区| 亚洲欧美日韩国产一区二区三区 | 欧美不卡一区二区三区| 日韩国产高清影视| 色狠狠桃花综合| 国产精品高潮呻吟| 国产一区三区三区| 91精品国产综合久久久蜜臀图片| 中文字幕一区二区日韩精品绯色| 国模大尺度一区二区三区| 宅男在线国产精品| 一区二区三区.www| 一本在线高清不卡dvd| 国产偷国产偷亚洲高清人白洁 | 欧美色电影在线| 亚洲日本一区二区三区| 国产成人亚洲精品青草天美| 欧美一级高清片在线观看| 精品视频在线视频| 最新久久zyz资源站| 欧美一区二区三区系列电影| 国产91精品久久久久久久网曝门| 国产女人18毛片水真多成人如厕| 视频一区视频二区中文字幕| 国产日韩成人精品| 粉嫩av亚洲一区二区图片| 国产无一区二区| 91浏览器打开| 石原莉奈在线亚洲三区| 日本一区二区三区免费乱视频| 波多野洁衣一区| 成人美女视频在线看| 国产精品传媒在线| 精品日韩成人av| 欧美系列在线观看| 亚洲国产视频网站| 2欧美一区二区三区在线观看视频| 午夜精品福利一区二区三区av | 色综合天天狠狠| 日韩精品一级中文字幕精品视频免费观看| 9色porny自拍视频一区二区| 国产人伦精品一区二区| 欧美熟乱第一页| 蜜臀a∨国产成人精品| 国产精品三级av| 欧美高清dvd|