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

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

?? loader.asm

?? 往內存中載入內核。進入保護模式
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
	shr	al, 1			; y >> 1 (其實是 y/BPB_NumHeads, 這里BPB_NumHeads=2)
	mov	ch, al			; ch <- 柱面號
	and	dh, 1			; dh & 1 = 磁頭號
	pop	bx			; 恢復 bx
	; 至此, "柱面號, 起始扇區, 磁頭號" 全部得到 ^^^^^^^^^^^^^^^^^^^^^^^^
	mov	dl, [BS_DrvNum]		; 驅動器號 (0 表示 A 盤)
.GoOnReading:
	mov	ah, 2			; 讀
	mov	al, byte [bp-2]		; 讀 al 個扇區
	int	13h
	jc	.GoOnReading		; 如果讀取錯誤 CF 會被置為 1, 這時就不停地讀, 直到正確為止

	add	esp, 2
	pop	bp

	ret

;----------------------------------------------------------------------------
; 函數名: GetFATEntry
;----------------------------------------------------------------------------
; 作用:
;	找到序號為 ax 的 Sector 在 FAT 中的條目, 結果放在 ax 中
;	需要注意的是, 中間需要讀 FAT 的扇區到 es:bx 處, 所以函數一開始保存了 es 和 bx
GetFATEntry:
	push	es
	push	bx
	push	ax
	mov	ax, BaseOfKernelFile	; ┓
	sub	ax, 0100h		; ┣ 在 BaseOfKernelFile 后面留出 4K 空間用于存放 FAT
	mov	es, ax			; ┛
	pop	ax
	mov	byte [bOdd], 0
	mov	bx, 3
	mul	bx			; dx:ax = ax * 3
	mov	bx, 2
	div	bx			; dx:ax / 2  ==>  ax <- 商, dx <- 余數
	cmp	dx, 0
	jz	LABEL_EVEN
	mov	byte [bOdd], 1
LABEL_EVEN:;偶數
	xor	dx, dx			; 現在 ax 中是 FATEntry 在 FAT 中的偏移量. 下面來計算 FATEntry 在哪個扇區中(FAT占用不止一個扇區)
	mov	bx, [BPB_BytsPerSec]
	div	bx			; dx:ax / BPB_BytsPerSec  ==>	ax <- 商   (FATEntry 所在的扇區相對于 FAT 來說的扇區號)
					;				dx <- 余數 (FATEntry 在扇區內的偏移)。
	push	dx
	mov	bx, 0			; bx <- 0	于是, es:bx = (BaseOfKernelFile - 100):00 = (BaseOfKernelFile - 100) * 10h
	add	ax, SectorNoOfFAT1	; 此句執行之后的 ax 就是 FATEntry 所在的扇區號
	mov	cl, 2
	call	ReadSector		; 讀取 FATEntry 所在的扇區, 一次讀兩個, 避免在邊界發生錯誤, 因為一個 FATEntry 可能跨越兩個扇區
	pop	dx
	add	bx, dx
	mov	ax, [es:bx]
	cmp	byte [bOdd], 1
	jnz	LABEL_EVEN_2
	shr	ax, 4
LABEL_EVEN_2:
	and	ax, 0FFFh

LABEL_GET_FAT_ENRY_OK:

	pop	bx
	pop	es
	ret
;----------------------------------------------------------------------------


;----------------------------------------------------------------------------
; 函數名: KillMotor
;----------------------------------------------------------------------------
; 作用:
;	關閉軟驅馬達
KillMotor:
	push	dx
	mov	dx, 03F2h
	mov	al, 0
	out	dx, al
	pop	dx
	ret
;----------------------------------------------------------------------------


; 從此以后的代碼在保護模式下執行 ----------------------------------------------------
; 32 位代碼段. 由實模式跳入 ---------------------------------------------------------
[SECTION .s32]

ALIGN	32

[BITS	32]

LABEL_PM_START:
	mov	ax, SelectorVideo
	mov	gs, ax
	mov	ax, SelectorFlatRW
	mov	ds, ax
	mov	es, ax
	mov	fs, ax
	mov	ss, ax
	mov	esp, TopOfStack

	push	szMemChkTitle
	call	DispStr
	add	esp, 4

	call	DispMemInfo
	call	SetupPaging

	mov	ah, 0Fh				; 0000: 黑底    1111: 白字
	mov	al, 'P'
	mov	[gs:((80 * 0 + 39) * 2)], ax	; 屏幕第 0 行, 第 39 列。
	jmp	$


%include	"lib.inc"


; 顯示內存信息 --------------------------------------------------------------
DispMemInfo:
	push	esi
	push	edi
	push	ecx

	mov	esi, MemChkBuf
	mov	ecx, [dwMCRNumber]	;for(int i=0;i<[MCRNumber];i++) // 每次得到一個ARDS(Address Range Descriptor Structure)結構
.loop:					;{
	mov	edx, 5			;	for(int j=0;j<5;j++)	// 每次得到一個ARDS中的成員,共5個成員
	mov	edi, ARDStruct		;	{			// 依次顯示:BaseAddrLow,BaseAddrHigh,LengthLow,LengthHigh,Type
.1:					;
	push	dword [esi]		;
	call	DispInt			;		DispInt(MemChkBuf[j*4]); // 顯示一個成員
	pop	eax			;
	stosd				;		ARDStruct[j*4] = MemChkBuf[j*4];
	add	esi, 4			;
	dec	edx			;
	cmp	edx, 0			;
	jnz	.1			;	}
	call	DispReturn		;	printf("\n");
	cmp	dword [dwType], 1	;	if(Type == AddressRangeMemory) // AddressRangeMemory : 1, AddressRangeReserved : 2
	jne	.2			;	{
	mov	eax, [dwBaseAddrLow]	;
	add	eax, [dwLengthLow]	;
	cmp	eax, [dwMemSize]	;		if(BaseAddrLow + LengthLow > MemSize)
	jb	.2			;
	mov	[dwMemSize], eax	;			MemSize = BaseAddrLow + LengthLow;
.2:					;	}
	loop	.loop			;}
					;
	call	DispReturn		;printf("\n");
	push	szRAMSize		;
	call	DispStr			;printf("RAM size:");
	add	esp, 4			;
					;
	push	dword [dwMemSize]	;
	call	DispInt			;DispInt(MemSize);
	add	esp, 4			;

	pop	ecx
	pop	edi
	pop	esi
	ret
; ---------------------------------------------------------------------------

; 啟動分頁機制 --------------------------------------------------------------
SetupPaging:
	; 根據內存大小計算應初始化多少PDE以及多少頁表
	xor	edx, edx
	mov	eax, [dwMemSize]
	mov	ebx, 400000h	; 400000h = 4M = 4096 * 1024, 一個頁表對應的內存大小
	div	ebx
	mov	ecx, eax	; 此時 ecx 為頁表的個數,也即 PDE 應該的個數
	test	edx, edx
	jz	.no_remainder
	inc	ecx		; 如果余數不為 0 就需增加一個頁表
.no_remainder:
	push	ecx		; 暫存頁表個數

	; 為簡化處理, 所有線性地址對應相等的物理地址. 并且不考慮內存空洞.

	; 首先初始化頁目錄
	mov	ax, SelectorFlatRW
	mov	es, ax
	mov	edi, PageDirBase	; 此段首地址為 PageDirBase
	xor	eax, eax
	mov	eax, PageTblBase | PG_P  | PG_USU | PG_RWW
.1:
	stosd
	add	eax, 4096		; 為了簡化, 所有頁表在內存中是連續的.
	loop	.1

	; 再初始化所有頁表
	pop	eax			; 頁表個數
	mov	ebx, 1024		; 每個頁表 1024 個 PTE
	mul	ebx
	mov	ecx, eax		; PTE個數 = 頁表個數 * 1024
	mov	edi, PageTblBase	; 此段首地址為 PageTblBase
	xor	eax, eax
	mov	eax, PG_P  | PG_USU | PG_RWW
.2:
	stosd
	add	eax, 4096		; 每一頁指向 4K 的空間
	loop	.2

	mov	eax, PageDirBase
	mov	cr3, eax
	mov	eax, cr0
	or	eax, 80000000h
	mov	cr0, eax
	jmp	short .3
.3:
	nop

	ret
; 分頁機制啟動完畢 ----------------------------------------------------------


; SECTION .data1 之開始 ---------------------------------------------------------------------------------------------
[SECTION .data1]

ALIGN	32

LABEL_DATA:
; 實模式下使用這些符號
; 字符串
_szMemChkTitle:			db	"BaseAddrL BaseAddrH LengthLow LengthHigh   Type", 0Ah, 0
_szRAMSize:			db	"RAM size:", 0
_szReturn:			db	0Ah, 0
;; 變量
_dwMCRNumber:			dd	0	; Memory Check Result
_dwDispPos:			dd	(80 * 6 + 0) * 2	; 屏幕第 6 行, 第 0 列。
_dwMemSize:			dd	0
_ARDStruct:			; Address Range Descriptor Structure
	_dwBaseAddrLow:		dd	0
	_dwBaseAddrHigh:	dd	0
	_dwLengthLow:		dd	0
	_dwLengthHigh:		dd	0
	_dwType:		dd	0
_MemChkBuf:	times	256	db	0
;
;; 保護模式下使用這些符號
szMemChkTitle		equ	BaseOfLoaderPhyAddr + _szMemChkTitle
szRAMSize		equ	BaseOfLoaderPhyAddr + _szRAMSize
szReturn		equ	BaseOfLoaderPhyAddr + _szReturn
dwDispPos		equ	BaseOfLoaderPhyAddr + _dwDispPos
dwMemSize		equ	BaseOfLoaderPhyAddr + _dwMemSize
dwMCRNumber		equ	BaseOfLoaderPhyAddr + _dwMCRNumber
ARDStruct		equ	BaseOfLoaderPhyAddr + _ARDStruct
	dwBaseAddrLow	equ	BaseOfLoaderPhyAddr + _dwBaseAddrLow
	dwBaseAddrHigh	equ	BaseOfLoaderPhyAddr + _dwBaseAddrHigh
	dwLengthLow	equ	BaseOfLoaderPhyAddr + _dwLengthLow
	dwLengthHigh	equ	BaseOfLoaderPhyAddr + _dwLengthHigh
	dwType		equ	BaseOfLoaderPhyAddr + _dwType
MemChkBuf		equ	BaseOfLoaderPhyAddr + _MemChkBuf


; 堆棧就在數據段的末尾
StackSpace:	times	1000h	db	0
TopOfStack	equ	BaseOfLoaderPhyAddr + $	; 棧頂
; SECTION .data1 之結束 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本久久一区二区三区| 综合色中文字幕| 一区二区三区国产精品| 国产乱码精品一品二品| 91成人免费在线视频| 中日韩免费视频中文字幕| 日本欧美大码aⅴ在线播放| 99久久er热在这里只有精品66| 欧美一级片在线观看| 亚洲成人激情社区| 欧美亚洲一区二区三区四区| 亚洲天堂久久久久久久| 成人黄色软件下载| 国产精品每日更新在线播放网址| 国产一区二区三区综合| 精品少妇一区二区三区| 青青草成人在线观看| 欧美一区二区三区四区五区| 性欧美疯狂xxxxbbbb| 欧美性大战久久| 五月婷婷久久综合| 欧美精品欧美精品系列| 亚洲国产精品一区二区久久 | 不卡一二三区首页| 国产精品视频九色porn| 成人h精品动漫一区二区三区| 国产女同性恋一区二区| 丁香网亚洲国际| 亚洲欧美日韩小说| 欧美日韩国产一级| 麻豆久久一区二区| 国产欧美日韩激情| 97精品电影院| 免费人成在线不卡| 欧美mv和日韩mv的网站| 在线观看视频一区| 免费在线看成人av| 欧美日韩国产天堂| 一区av在线播放| 欧美日韩高清一区| 国产成人精品影视| 亚洲欧美日韩在线播放| 91精品国产综合久久福利软件| 精品一区二区精品| 日韩毛片视频在线看| 在线电影院国产精品| 懂色av中文一区二区三区| 亚洲黄色片在线观看| 日韩欧美在线123| 色噜噜狠狠色综合欧洲selulu| 美女脱光内衣内裤视频久久影院| 国产精品情趣视频| 欧美老女人第四色| 99在线精品观看| 狠狠色综合日日| 日本aⅴ亚洲精品中文乱码| 国产精品激情偷乱一区二区∴| 7777女厕盗摄久久久| 色拍拍在线精品视频8848| 国产精品一区免费在线观看| 亚洲一区av在线| 日韩伦理av电影| 国产亚洲人成网站| 日韩欧美激情在线| 欧美日韩国产另类一区| 色激情天天射综合网| 国产成a人亚洲精| 国产麻豆精品久久一二三| 免费人成精品欧美精品| 五月天丁香久久| 亚洲成人免费观看| 亚洲一区二区三区国产| 亚洲美女免费视频| 亚洲免费观看高清完整版在线观看熊| 亚洲国产精品精华液2区45| 精品国产乱码久久久久久免费| 日韩三级.com| 欧美精品一区二区三区在线播放| 日韩一区和二区| 精品日韩欧美一区二区| 久久一区二区三区国产精品| 日韩精品一区二区三区视频播放 | 久久99国内精品| 久久99精品久久久久久久久久久久 | 色婷婷一区二区三区四区| 色欧美片视频在线观看 | 国产精品国产精品国产专区不蜜 | 久久国产精品免费| 国产精品综合二区| aaa亚洲精品一二三区| 色乱码一区二区三区88| 91精品国产综合久久久久久| eeuss鲁一区二区三区| 日韩主播视频在线| 国产麻豆精品一区二区| 99这里只有精品| 正在播放亚洲一区| 国产亚洲福利社区一区| 亚洲激情自拍视频| 蜜桃视频免费观看一区| 国产成人综合自拍| 欧美日韩一区在线| 国产亚洲1区2区3区| 亚洲成va人在线观看| 国产999精品久久久久久| 色偷偷久久人人79超碰人人澡| 日韩三级伦理片妻子的秘密按摩| 国产精品五月天| 日本欧美久久久久免费播放网| 欧美一级片在线观看| 国产精品久久午夜夜伦鲁鲁| 秋霞av亚洲一区二区三| 色婷婷综合久色| 国产三级精品视频| 久久国产精品72免费观看| 欧美一a一片一级一片| 中文字幕在线不卡一区| 精品一二三四在线| 5858s免费视频成人| 一区二区三区四区在线播放| 国产精品主播直播| 亚洲精品一区二区三区蜜桃下载| 亚洲一级二级三级| 在线观看av一区二区| 中文字幕一区三区| 懂色av一区二区三区蜜臀| www久久精品| 国产麻豆一精品一av一免费| 日韩精品一区二区三区在线 | 成人深夜视频在线观看| 久久综合九色综合欧美就去吻| 日本视频免费一区| 欧美一区二区在线视频| 一区二区三区美女| 欧美日韩激情在线| 亚洲一区二区在线观看视频 | 国产精品久久久久婷婷| 免费在线视频一区| 亚洲成人资源在线| 欧美亚洲另类激情小说| 一区二区三区蜜桃| 91麻豆精品国产91久久久久久| 亚洲成av人片一区二区三区| 欧美二区在线观看| 久久狠狠亚洲综合| 国产精品日日摸夜夜摸av| 91麻豆123| 麻豆精品新av中文字幕| 久久精品一区二区三区av| 国产中文字幕一区| 亚洲欧美一区二区视频| 欧美日韩国产欧美日美国产精品| 奇米色一区二区| 国产精品视频九色porn| 欧美性感一类影片在线播放| 国产综合久久久久影院| 亚洲视频一二三| 日韩欧美一级精品久久| 91女人视频在线观看| 日本欧美大码aⅴ在线播放| 国产精品午夜电影| 欧美一区二区三区免费在线看| 国产一区二区久久| 亚洲成人一二三| 欧美国产精品中文字幕| 欧美日韩一区在线观看| 国产美女娇喘av呻吟久久| 欧美成人乱码一区二区三区| 极品少妇一区二区三区精品视频| 亚洲视频在线一区| 久久久久久久久蜜桃| 欧美一区二区在线播放| 99re热视频精品| 国产成人综合在线| 奇米一区二区三区| 午夜精品久久久久久不卡8050| 久久久一区二区三区捆绑**| 国产日韩成人精品| 日韩欧美www| 69av一区二区三区| 欧美日韩激情在线| 欧美在线视频你懂得| 成人av动漫网站| 99久久精品国产观看| 91视视频在线观看入口直接观看www| 国产一区二区三区免费播放 | 91在线观看视频| 成人免费黄色在线| 成人av在线资源网站| 国产69精品久久777的优势| 国产成人自拍网| 国产精品99久久不卡二区| 激情成人综合网| 久久国产精品第一页| 韩国女主播一区| 国产成人精品免费看| 国产盗摄一区二区| 成年人国产精品| 欧美午夜精品一区二区蜜桃| 欧美日韩一区二区三区在线|