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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kernel.asm

?? 《自己動手寫操作系統》的隨書附贈光盤
?? ASM
字號:

; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;                               kernel.asm
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;                                                     Forrest Yu, 2005
; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


%include "sconst.inc"

; 導入函數
extern	cstart
extern	tinix_main
extern	exception_handler
extern	spurious_irq
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	clock_int_msg
	call	disp_str
	add	esp, 4
	;push	1
	;call	delay
	;add	esp, 4

	cli

	mov	esp, [p_proc_ready]	; 離開內核棧;

	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一区二区三区免费野_久草精品视频
亚洲图片有声小说| 韩国一区二区三区| 国产原创一区二区三区| 94-欧美-setu| 精品国产91亚洲一区二区三区婷婷 | 天堂在线一区二区| 国产成人精品影视| 欧美一区二区免费视频| 亚洲在线视频一区| 不卡的av中国片| 2021中文字幕一区亚洲| 亚洲成人免费视频| 色综合久久中文综合久久牛| 久久精品欧美一区二区三区不卡 | 欧美乱熟臀69xxxxxx| 国产精品久久网站| 国产传媒日韩欧美成人| 欧美一卡在线观看| 婷婷综合另类小说色区| 欧美亚洲国产怡红院影院| 中文字幕一区免费在线观看| 国产乱子伦一区二区三区国色天香| 欧美卡1卡2卡| 亚洲国产欧美另类丝袜| 91久久线看在观草草青青| 国产精品第五页| av成人免费在线| 国产日韩欧美精品综合| 国产一区二区女| 国产亚洲欧美色| 国产凹凸在线观看一区二区| 国产色一区二区| 高清日韩电视剧大全免费| 国产亚洲精品7777| 国产99精品国产| 中文字幕亚洲一区二区av在线| 国产福利一区二区三区视频| 国产目拍亚洲精品99久久精品| 国产suv精品一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋 | 色婷婷狠狠综合| 一级中文字幕一区二区| 欧美日韩国产色站一区二区三区| 亚洲图片欧美视频| 91精品国产综合久久精品| 久久精品国产澳门| 国产亚洲一区二区三区在线观看| 国产91精品一区二区麻豆网站| 中文字幕一区免费在线观看| 在线观看免费视频综合| 日韩精品一级中文字幕精品视频免费观看 | 成人在线综合网| 亚洲日本在线看| 欧美猛男gaygay网站| 男女性色大片免费观看一区二区 | 99在线视频精品| 一区二区三区四区五区视频在线观看 | 日韩经典一区二区| 2020国产精品自拍| 91亚洲国产成人精品一区二三| 一区二区三区**美女毛片| 欧美日韩视频第一区| 国产一区欧美一区| 亚洲少妇30p| 欧美疯狂做受xxxx富婆| 国产精品一二三四五| 伊人婷婷欧美激情| 日韩精品一区二区三区三区免费| 丁香网亚洲国际| 天天综合天天综合色| 国产日韩欧美激情| 欧美性猛片xxxx免费看久爱| 激情国产一区二区| 亚洲一区二区黄色| 久久久久久久久久久电影| 在线观看国产91| 岛国精品一区二区| 日本成人在线视频网站| 亚洲日本在线看| 久久精品一区蜜桃臀影院| 欧美日产国产精品| 色综合色狠狠综合色| 激情六月婷婷久久| 午夜一区二区三区视频| 亚洲欧洲日产国码二区| 精品日韩99亚洲| 精品视频在线看| 99久久99久久久精品齐齐| 国产一区视频在线看| 轻轻草成人在线| 亚洲一区二区美女| 18成人在线观看| 久久久久久亚洲综合影院红桃| 欧美日韩精品福利| 色婷婷久久久亚洲一区二区三区| 国产a级毛片一区| 韩国视频一区二区| 美女在线观看视频一区二区| 亚洲一二三区视频在线观看| 成人欧美一区二区三区黑人麻豆| 精品国产3级a| 亚洲精品一区二区三区福利| 欧美日韩电影在线播放| 欧美亚洲综合另类| 一本一道久久a久久精品| 成人av第一页| 成人动漫一区二区在线| 粉嫩嫩av羞羞动漫久久久| 国产成人亚洲综合a∨婷婷| 精品一二三四区| 日韩电影一区二区三区| 五月婷婷色综合| 免费成人在线网站| 免费观看成人av| 国产曰批免费观看久久久| 韩国欧美一区二区| 国产成人自拍高清视频在线免费播放| 激情五月播播久久久精品| 国产呦精品一区二区三区网站| 国产一区二三区好的| 久久99久久精品| 激情欧美日韩一区二区| 国产成人免费视频网站 | 欧美精品第1页| 日韩一区二区精品葵司在线 | 亚洲伦理在线免费看| 亚洲精品成人精品456| 亚洲激情成人在线| 亚洲综合激情小说| 免费成人美女在线观看.| 理论片日本一区| 国产不卡免费视频| 99精品在线观看视频| 欧美精品一级二级| 精品电影一区二区| 国产精品久久久久久久久免费相片 | 久久久久久亚洲综合影院红桃 | 日韩精品乱码免费| 久久99久久99精品免视看婷婷 | 丰满岳乱妇一区二区三区| 91亚洲资源网| 欧美一级高清大全免费观看| 久久综合999| 亚洲精品写真福利| 青娱乐精品视频在线| 国产精品影视在线观看| 91一区二区在线观看| 777久久久精品| 国产欧美日韩另类视频免费观看| 亚洲四区在线观看| 蜜臀精品一区二区三区在线观看 | 玖玖九九国产精品| 不卡av在线网| 欧美一区二区私人影院日本| 国产精品丝袜黑色高跟| 视频一区二区三区入口| 福利一区二区在线| 欧美肥妇bbw| 亚洲欧美综合在线精品| 麻豆一区二区99久久久久| 99国产精品久久| 国产亚洲污的网站| 午夜精彩视频在线观看不卡| 成人h版在线观看| 宅男在线国产精品| 亚洲视频在线观看一区| 国产在线一区二区| 欧美日韩一区 二区 三区 久久精品| 久久久www成人免费无遮挡大片| 亚洲午夜电影网| 97久久精品人人爽人人爽蜜臀 | 欧美男生操女生| 亚洲欧美日韩一区| 国产黄人亚洲片| 欧美大尺度电影在线| 亚洲国产美国国产综合一区二区| bt欧美亚洲午夜电影天堂| 亚洲精品一区在线观看| 人禽交欧美网站| 欧美日韩一级大片网址| 亚洲视频一区二区在线| 国产91在线|亚洲| 精品对白一区国产伦| 香蕉加勒比综合久久| 91久久精品一区二区三| 亚洲天堂成人网| gogo大胆日本视频一区| 国产日本亚洲高清| 国产一区在线观看麻豆| 精品国产区一区| 久久国产尿小便嘘嘘| 日韩女优电影在线观看| 日本中文在线一区| 欧美日本免费一区二区三区| 夜色激情一区二区| 欧美色视频一区| 亚洲国产精品久久艾草纯爱| 欧美性欧美巨大黑白大战| 亚洲已满18点击进入久久| 精品视频999|