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

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

?? hellocn.cpp

?? 自己動手寫操作系統源代碼,不可多得的代碼
?? CPP
字號:
//***********************************************************************/
//    Author                    : Garry
//    Original Date             : May,27 2004
//    Module Name               : hellocn.cpp
//    Module Funciton           : 
//                                This module countains the source code.
//    Last modified Author      :
//    Last modified Date        :
//    Last modified Content     :
//                                1.
//                                2.
//    Lines number              :
//***********************************************************************/

//#ifndef __HELLO_CHINA__
//#include "hellocn.h"
//#endif

#ifndef __STDAFX_H__
#include "StdAfx.h"
#endif

void PrintStr(const char* pszMsg)
{
#ifdef __I386__                  //I386 implementation.
	__asm{
		push ebx
		push ecx
		mov ebx,__PRINTSTR_BASE
		mov ecx,dword ptr [ebx]
		mov eax,pszMsg
		push eax
		call ecx
		pop eax
		pop ecx
		pop ebx
	}
#else
#endif
}

void ClearScreen()
{
#ifdef __I386__
	__asm{
		push ebx
		mov ebx,__CLEARSCREEN_BASE
		call dword ptr [ebx]
		pop ebx
	}
#else
#endif
}

void PrintCh(unsigned short ch)
{
#ifdef __I386__
	__asm{
		push ebx
		mov ebx,__PRINTCH_BASE
		mov ax,word ptr [ebp + 0x08]
		push eax
		call dword ptr [ebx]
		pop eax
		pop ebx
	}
#else
#endif
}

void GotoHome()
{
#ifdef __I386__
	__asm{
		push ebx
		mov ebx,__GOTOHOME_BASE
		call dword ptr [ebx]
		pop ebx
	}
#else
#endif
}

void ChangeLine()
{
#ifdef __I386__
	__asm{
		push ebx
		mov ebx,__CHANGELINE_BASE
		call dword ptr [ebx]
		pop ebx
	}
#else
#endif
}

KEY_HANDLER SetKeyHandler(KEY_HANDLER keyHandler)
{
#ifdef __I386__
	__asm
	{
		push ebx
        push ecx
		mov ebx,__SETNOTIFYOS_BASE
		mov ecx,keyHandler
		push ecx
		call dword ptr [ebx]
		pop ecx
		pop ecx
		pop ebx
	}
#else
#endif
}

VOID GotoPrev()
{
#ifdef __I386__
	__asm{
		push ebx
		mov ebx,__GOTOPREV_BASE
		call dword ptr [ebx]
		pop ebx
	}
#else
#endif
}

INT_HANDLER SetTimerHandler(__GENERAL_INTERRUPT_HANDLER TimerHandler)
{
#ifdef __I386__
	__asm{
		push ebx
		push ecx
		mov ebx,__TIMERHANDLER_BASE
		mov eax,TimerHandler
		mov ecx,dword ptr [ebx]
		mov dword ptr [ebx],eax
		mov eax,ecx
		pop ecx
		pop ebx
	}
#else
#endif
}

WORD SetGdtEntry(DWORD dw1,DWORD dw2)
{
#ifdef __I386__
	__asm{
		push ebx
		mov ebx,__SETGDTENTRY_BASE
		push dw2
		push dw1
		call dword ptr [ebx]
		pop dw1
		pop dw2
		pop ebx
	}
#else
#endif
}

VOID MemZero(LPVOID pMemAddress,DWORD dwSize)
{
#ifdef __I386__
	__asm{
		push ecx
		push edi
		push eax
		xor al,al
		mov ecx,dwSize
		mov edi,pMemAddress
		cld
		rep stosb
		pop eax
		pop edi
		pop ecx
	}
#else
#endif
}

VOID MemCpy(LPVOID lpDes,LPVOID lpSrc,DWORD dwSize)
{
#ifdef __I386
	__asm{
		push esi
		push edi
		push ecx
		mov esi,lpSrc
		mov edi,lpDes
		mov ecx,dwSize
		rep movsb
		pop ecx
		pop edi
		pop esi
		retn
	}
#else
#endif
}

__declspec(naked) VOID ReadByteFromPort(UCHAR* pByte,WORD wPort)
{
#ifdef __I386__
	__asm{
		push ebp
		mov ebp,esp
		push edx
		push ebx
		mov ebx,dword ptr [ebp + 8]
		mov dx,word ptr [ebp + 12]
		in al,dx
		mov byte ptr [ebx],al
		pop ebx
		pop edx
		leave
		retn
	}
#else
#endif
}

__declspec(naked) VOID WriteByteToPort(UCHAR byte,WORD wPort)
{
#ifdef __I386__
	__asm{
		push ebp
		mov ebp,esp
		push edx
		mov al,byte ptr [ebp + 8]
		mov dx,word ptr [ebp + 12]
		out dx,al
		pop edx
		leave
		retn
	}
#else
#endif
}

__declspec(naked) VOID ReadByteStringFromPort(LPVOID lpBuffer,DWORD dwBufLen,WORD wPort)
{
#ifdef __I386__
	__asm{
		push ebp
		mov ebp,esp
		//push ebx
		push ecx
		push edx
		push edi
		mov edi,dword ptr [ebp + 8]
		//mov esi,dword ptr [ebx]
		mov ecx,dword ptr [ebp + 12]
		mov dx,word ptr [ebp + 16]
		rep insb
		pop edi
		pop edx
		pop ecx
		//pop ebx
		leave
		retn
	}
#else
#endif
}

__declspec(naked) VOID WriteByteStringToPort(LPVOID lpBuffer,DWORD dwBufLen,WORD wPort)
{
#ifdef __I386__
	__asm{
		push ebp
		mov ebp,esp
		push ecx
		push edx
		push esi
		mov esi,dword ptr [ebp + 8]
		mov ecx,dword ptr [ebp + 12]
		mov dx,word ptr [ebp + 16]
		rep outsb
		pop esi
		pop edx
		pop ecx
		leave
		retn
	}
#else
#endif
}

__declspec(naked) VOID ReadWordFromPort(WORD* pWord,WORD wPort)
{
#ifdef __I386__
	__asm{
		push ebp
		mov ebp,esp
		push ebx
		push edx
		mov dx,word ptr [ebp + 0x0c]
		mov ebx,dword ptr [ebp + 0x08]
		in ax,dx
		mov word ptr [ebx],ax
		pop edx
		pop ebx
		leave
		retn
	}
#else
#endif
}

__declspec(naked) VOID WriteWordToPort(WORD,WORD)
{
#ifdef __I386__
	__asm{
		push ebp
		mov ebp,esp
		push dx
		mov dx,word ptr [ebp + 0x0c]
		mov ax,word ptr [ebp + 0x08]
		out dx,ax
		pop dx
		leave
		retn
	}
#else
#endif
}

__declspec(naked) VOID ReadWordStringFromPort(LPVOID,DWORD,WORD)
{
#ifdef __I386__
	__asm{
		push ebp
		mov ebp,esp
		push ecx
		push edx
		push edi
		mov edi,dword ptr [ebp + 0x08]
		mov ecx,dword ptr [ebp + 0x0c]
		shr ecx,0x01
		mov dx,  word ptr [ebp + 0x10]
		cld
		rep insw
		pop edi
		pop edx
		pop ecx
		leave
		retn
	}
#else
#endif
}

__declspec(naked) VOID WriteWordStringToPort(LPVOID,DWORD,WORD)
{
#ifdef __I386__
	__asm{
		push ebp
		mov ebp,esp
		push ecx
		push edx
		push esi
		mov esi,dword ptr [ebp + 0x08]
		mov ecx,dword ptr [ebp + 0x0c]
		shr ecx,0x02
		mov dx,  word ptr [ebp + 0x10]
		rep outsw
		pop esi
		pop edx
		pop ecx
		leave
		retn
	}
#else
#endif
}

//
//Interrupt flag control functions.
//

__declspec(naked) VOID DisableInterrupt()
{
#ifdef __I386__
	__asm{
		cli
		retn
	}
#else
#endif
}

__declspec(naked) VOID EnableInterrupt()
{
#ifdef __I386__
	__asm{
		sti
		retn
	}
#else
#endif
}

/*
//
//64 bit unsigned number operation's implementation.
//

//Compare two U64 numbers,if the first is larger than the second,
//returns TRUE,else,returns FALSE.
BOOL U64_LARGER(__U64* lpFirst,__U64* lpSecond)
{
	BOOL        bResult          = FALSE;

	if((NULL == lpFirst) || (NULL == lpSecond))  //Parameters check.
		return FALSE;

	if(lpFirst->dwHighPart > lpSecond->dwHighPart)
		bResult = TRUE;
	else
	{
		if((lpFirst->dwHighPart == lpSecond->dwHighPart) &&
		   (lpFirst->dwHighPart >  lpSecond->dwHighPart))
		   bResult = TRUE;
		else
			bResult = FALSE;
	}
	return bResult;
}

//Compare two U64 numbers,if equal,returns TRUE,else,returns FALSE.
BOOL U64_EQUAL(__U64* lpFirst,__U64* lpSecond)
{
	if((NULL == lpFirst) || (NULL == lpSecond))
		return FALSE;

	return ((lpFirst->dwHighPart == lpSecond->dwHighPart) &&
		    (lpFirst->dwLowPart  == lpSecond->dwLowPart)) ?
           TRUE : FALSE;
}

//Increment one U64 number.
VOID U64_INCREMENT(__U64* lpNumber)
{
	if(NULL == lpNumber) //parameter check.
		return;

	if(0xFFFFFFFF == lpNumber->dwLowPart)
	{
		lpNumber->dwHighPart += 1;
		lpNumber->dwLowPart  =  0;
	}
	else
	{
		lpNumber->dwLowPart += 1;
	}
	return;
}

//Decrement one U64 number.
VOID U64_DECREMENT(__U64* lpNumber)
{
	if(NULL == lpNumber)
		return;

	if(0 == lpNumber->dwLowPart)
	{
		lpNumber->dwHighPart -= 1;
		lpNumber->dwLowPart = 0xFFFFFFFF;
	}
	else
	{
		lpNumber->dwLowPart -= 1;
	}
	return;
}

//Add two U64 number,stores the result into the third one.
VOID U64_ADD(__U64* lpFirst,__U64* lpSecond,__U64* lpResult)
{
}

//Substract the second U64 number from the first,stores the result into third one.
VOID U64_SUB(__U64* lpFirst,__U64* lpSecond,__U64* lpResult)
{
}

//Set one bit of a U64 number,it's position is indicated by second parameter.
VOID U64_SET_BIT(__U64* lpNumber,UCHAR ucPos)
{
	DWORD         dwTmp        = 0x00000001;
	UCHAR         ucTmp        = 0;

	if((NULL == lpNumber) || ucPos >= 64)  //Parameters check.
		return;

	if(ucPos < 32)
	{
		ucTmp = ucPos;
		dwTmp <<= ucTmp;
		lpNumber->dwLowPart |= dwTmp;
	}
	else
	{
		ucTmp = ucPos - 32;
		dwTmp <<= ucTmp;
		lpNumber->dwHighPart |= dwTmp;
	}
}

//Clear one bit of a U64 number.
VOID U64_CLEAR_BIT(__U64* lpNumber,UCHAR ucPos)
{
	DWORD         dwTmp         = 0x00000001;
	UCHAR         ucTmp         = 0;

	if((NULL == lpNumber) || (ucPos >= 64))
		return;

	if(ucPos < 32)
	{
		ucTmp = ucPos;
		dwTmp <<= ucTmp;
		dwTmp = ~dwTmp;
		lpNumber->dwLowPart &= dwTmp;
	}
	else
	{
		ucTmp = ucPos - 32;
		dwTmp <<= ucTmp;
		dwTmp = ~dwTmp;
		lpNumber->dwHighPart &= dwTmp;
	}
}
*/

//
//Error handling routines implementing.
//

static VOID FatalErrorHandler(DWORD dwReason,LPSTR lpszMsg)
{
	PrintLine("Error Level : FATAL(1)");
	if(lpszMsg != NULL)
		PrintLine(lpszMsg);
	return;
}

static VOID CriticalErrorHandler(DWORD dwReason,LPSTR lpszMsg)
{
	PrintLine("Error Level : CRITICAL(2)");
	if(lpszMsg != NULL)
		PrintLine(lpszMsg);
	return;
}

static VOID ImportantErrorHandler(DWORD dwReason,LPSTR lpszMsg)
{
	PrintLine("Error Level : IMPORTANT(3)");
	if(lpszMsg != NULL)
		PrintLine(lpszMsg);
	return;
}

static VOID AlarmErrorHandler(DWORD dwReason,LPSTR lpszMsg)
{
	PrintLine("Error Level : ALARM(4)");
	if(lpszMsg != NULL)
		PrintLine(lpszMsg);
	return;
}

static VOID InformErrorHandler(DWORD dwReason,LPSTR lpszMsg)
{
	PrintLine("Error Level : INFORM(5)");
	if(lpszMsg != NULL)
		PrintLine(lpszMsg);
	return;
}

VOID ErrorHandler(DWORD dwLevel,DWORD dwReason,LPSTR lpszMsg)
{
	switch(dwLevel)
	{
	case ERROR_LEVEL_FATAL:
		FatalErrorHandler(dwReason,lpszMsg);
		break;
	case ERROR_LEVEL_CRITICAL:
		CriticalErrorHandler(dwReason,lpszMsg);
		break;
	case ERROR_LEVEL_IMPORTANT:
		ImportantErrorHandler(dwReason,lpszMsg);
		break;
	case ERROR_LEVEL_ALARM:
		AlarmErrorHandler(dwReason,lpszMsg);
		break;
	case ERROR_LEVEL_INFORM:
		InformErrorHandler(dwReason,lpszMsg);
		break;
	default:
		break;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区四区五区中文| 欧美另类videos死尸| 91香蕉视频黄| 欧美老女人第四色| 国产精品国产a| 麻豆视频一区二区| 欧美性生交片4| 中文字幕乱码日本亚洲一区二区| 亚洲第四色夜色| 粉嫩欧美一区二区三区高清影视| 欧美一卡2卡三卡4卡5免费| 一区二区三区在线影院| 国产成人自拍网| 欧美成人综合网站| 日韩高清一区二区| 欧美三电影在线| 亚洲情趣在线观看| 成人性视频网站| 久久久久久久久久久久久夜| 日本va欧美va精品| 欧美精品日韩精品| 午夜视频一区在线观看| 91视频观看免费| 国产精品第四页| 国产成人免费xxxxxxxx| 日韩精品一区二区三区在线播放| 亚洲高清在线视频| 在线观看av一区| 亚洲免费毛片网站| 91在线免费播放| 一区二区在线观看视频在线观看| 91视频91自| 亚洲精选视频免费看| 在线观看网站黄不卡| 91丨porny丨首页| 国产一区不卡精品| 天天色综合成人网| 亚洲女人****多毛耸耸8| 亚洲男帅同性gay1069| 午夜激情一区二区三区| 在线免费观看日韩欧美| 日韩理论电影院| 99视频在线精品| 亚洲三级在线观看| 91蜜桃传媒精品久久久一区二区 | 国产视频视频一区| 国产一区欧美一区| 中文在线一区二区| va亚洲va日韩不卡在线观看| 亚洲男人都懂的| 欧美日韩午夜精品| 精品一区二区三区在线播放| 久久久电影一区二区三区| 成人av网在线| 午夜久久久久久电影| 精品少妇一区二区三区视频免付费 | 国产精品1区2区| 国产精品久久久久久久久免费樱桃| 国产aⅴ综合色| 亚洲图片欧美综合| 日韩一区二区电影在线| 成人黄色免费短视频| 亚洲综合免费观看高清完整版在线| 欧美色视频一区| 国模少妇一区二区三区| 成人欧美一区二区三区1314| 欧美日韩国产美| 国产成人在线观看免费网站| 夜夜操天天操亚洲| 欧美精品一区在线观看| 色菇凉天天综合网| 亚洲成a人v欧美综合天堂| 风间由美中文字幕在线看视频国产欧美| 国产经典欧美精品| 一区二区三区高清| 欧美tk—视频vk| 99re这里只有精品首页| 青青草97国产精品免费观看无弹窗版| 久久精品亚洲精品国产欧美| 色婷婷av一区二区三区gif| 日本成人中文字幕在线视频| 国产日韩欧美不卡| 欧美色网站导航| av激情亚洲男人天堂| 青青草原综合久久大伊人精品| 亚洲国产高清在线观看视频| 欧美日韩精品一区视频| 成人一二三区视频| 六月丁香婷婷久久| 亚洲国产成人av| 中文字幕免费观看一区| 欧美一区二视频| 在线观看日韩一区| 99精品视频一区| 国产伦精品一区二区三区视频青涩 | 日本网站在线观看一区二区三区 | 国产一区二区主播在线| 五月婷婷综合在线| 亚洲欧洲成人精品av97| 国产三级精品视频| 精品福利在线导航| 91精品国产一区二区人妖| 欧美网站一区二区| 在线日韩国产精品| 91视频在线观看| 99久久99久久精品国产片果冻| 国产一区在线观看视频| 精品在线免费观看| 日本欧美韩国一区三区| 亚洲国产一区二区在线播放| 中文字幕在线播放不卡一区| 国产精品色在线观看| 久久亚洲欧美国产精品乐播| 欧美精品1区2区3区| 欧美精品在线一区二区| 欧美精品在线视频| 日韩一区二区视频在线观看| 日韩欧美国产三级| 欧美精品黑人性xxxx| 欧美艳星brazzers| 91国在线观看| 欧美日韩不卡视频| 91麻豆精品91久久久久同性| 欧美日韩在线精品一区二区三区激情| 91亚洲精品久久久蜜桃网站| 色婷婷综合久久久中文字幕| 日本道精品一区二区三区| 欧洲亚洲国产日韩| 欧美三级欧美一级| 欧美一区二区三区电影| 日韩欧美在线网站| 久久久久久久综合| 国产精品麻豆一区二区| 亚洲三级在线播放| 亚洲va韩国va欧美va| 欧美aa在线视频| 国产精品系列在线播放| 色偷偷88欧美精品久久久| 欧美日韩在线一区二区| 精品国产乱码久久久久久免费| 国产女主播一区| 亚洲一区二区三区视频在线| 免费成人av在线| 成人午夜大片免费观看| 欧美怡红院视频| 久久婷婷国产综合国色天香| 亚洲欧美日韩在线不卡| 日韩高清在线不卡| caoporn国产一区二区| 欧美亚洲另类激情小说| 欧美成人在线直播| 亚洲日穴在线视频| 老司机精品视频在线| 99re热视频这里只精品 | 欧美影院一区二区| 久久婷婷成人综合色| 伊人一区二区三区| 精品一区二区国语对白| a4yy欧美一区二区三区| 日韩欧美中文一区| 亚洲黄一区二区三区| 激情文学综合网| 欧美特级限制片免费在线观看| 精品国产123| 午夜精品久久久久久| 不卡的av在线| 精品国内二区三区| 香蕉影视欧美成人| 99精品视频一区二区三区| 欧美精品一区二区三区很污很色的 | 99免费精品视频| 精品理论电影在线| 亚洲电影欧美电影有声小说| 粉嫩绯色av一区二区在线观看| 日韩你懂的在线观看| 一区二区国产视频| 99久久国产综合精品女不卡| 日韩精品一区二区三区在线观看 | 亚洲最快最全在线视频| 国产一二精品视频| 日韩一区二区三区精品视频 | 欧美亚洲自拍偷拍| 亚洲精品自拍动漫在线| 99久久99久久精品免费观看| 久久色中文字幕| 六月丁香综合在线视频| 欧美久久一二区| 亚洲6080在线| 欧美人xxxx| 亚洲高清在线精品| 欧美人狂配大交3d怪物一区 | 欧美一区二区女人| 日韩在线a电影| 欧美日韩高清一区| 亚洲成av人片在线观看无码| 欧美在线观看视频在线| 亚洲国产成人porn| 69堂亚洲精品首页| 五月婷婷久久丁香| 91麻豆精品国产综合久久久久久 |