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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? hellocn.cpp

?? 小型的操作系統(tǒng)開發(fā)的原代碼
?? 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;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看视频一区二区| 欧美一区二区精品| 热久久久久久久| 亚洲欧美综合另类在线卡通| 91精品国产乱码久久蜜臀| www.99精品| 国产另类ts人妖一区二区| 亚洲444eee在线观看| 亚洲女同ⅹxx女同tv| 久久嫩草精品久久久久| 这里是久久伊人| 欧美亚洲综合色| 91免费国产视频网站| 国产成a人亚洲精| 国产在线观看一区二区| 琪琪久久久久日韩精品| 夜夜揉揉日日人人青青一国产精品 | 青青草视频一区| 亚洲国产一区二区在线播放| 国产精品国产三级国产aⅴ中文| 国精产品一区一区三区mba视频| 欧美国产精品v| 欧美撒尿777hd撒尿| 91在线视频官网| 99国产精品一区| 99久久精品情趣| 成年人午夜久久久| 本田岬高潮一区二区三区| 国产精品一二一区| 国产一区二区在线看| 国内精品久久久久影院色| 美女一区二区三区| 蜜桃一区二区三区在线观看| 婷婷六月综合亚洲| 日本成人在线电影网| 视频一区欧美日韩| 日韩一区精品视频| 日日摸夜夜添夜夜添国产精品| 欧美精品一区二区三区高清aⅴ | 日韩影院在线观看| 天天综合网 天天综合色| 一区二区三区成人| 亚洲午夜精品17c| 亚洲一级电影视频| 水蜜桃久久夜色精品一区的特点| 久久综合色天天久久综合图片| 91在线精品一区二区三区| 91蜜桃免费观看视频| 色爱区综合激月婷婷| 在线一区二区视频| 欧美网站一区二区| 日韩一区二区电影在线| 欧美大片在线观看| 国产欧美精品一区二区色综合| 欧美日韩黄视频| 日韩一级免费一区| 久久久久久麻豆| 综合在线观看色| 亚洲国产精品精华液网站| 日本成人在线不卡视频| 国产成人精品免费视频网站| 91视频一区二区三区| 精品视频在线看| 久久综合av免费| 国产精品女人毛片| 无码av中文一区二区三区桃花岛| 国产精品国产三级国产普通话99| 日韩欧美成人午夜| 日本一区二区成人| 一区二区三区四区不卡在线| 视频一区中文字幕国产| 国产在线日韩欧美| 91精彩视频在线| 日韩美女一区二区三区四区| 国产日韩av一区| 亚洲国产精品一区二区久久恐怖片 | 欧美另类久久久品| 国产亚洲综合在线| 亚洲精品一二三| 经典三级一区二区| 色视频欧美一区二区三区| 日韩一级成人av| 亚洲视频在线一区二区| 美女mm1313爽爽久久久蜜臀| 成人aaaa免费全部观看| 日韩午夜激情视频| 亚洲卡通动漫在线| 国产伦精一区二区三区| 欧美美女喷水视频| 成人欧美一区二区三区白人| 久久国产尿小便嘘嘘尿| 欧美艳星brazzers| 国产精品人妖ts系列视频| 美女视频黄久久| 欧美日韩在线免费视频| 国产精品无人区| 国产在线一区观看| 欧美高清视频不卡网| 亚洲色图另类专区| 国产成人在线视频网址| 4438x亚洲最大成人网| 亚洲视频 欧洲视频| 国产风韵犹存在线视精品| 欧美一区日本一区韩国一区| 亚洲精品国产成人久久av盗摄| 亚洲午夜久久久久中文字幕久| 亚洲一区中文日韩| 丁香亚洲综合激情啪啪综合| 日韩欧美激情四射| 亚洲va韩国va欧美va| 色婷婷精品久久二区二区蜜臂av| 欧美性欧美巨大黑白大战| 欧美国产精品劲爆| 国产在线精品一区二区三区不卡| 国产一区二区调教| 在线综合视频播放| 一区二区三区在线影院| 91亚洲精品久久久蜜桃网站| 国产精品你懂的| 丁香一区二区三区| 欧美国产日本视频| 成人毛片视频在线观看| 国产欧美va欧美不卡在线| 国产精品一区三区| 久久蜜臀中文字幕| 国产伦精品一区二区三区免费| 色综合久久久久久久久久久| 中文字幕在线观看一区| 成人开心网精品视频| 国产精品久线在线观看| 不卡视频在线看| 亚洲欧美日韩国产另类专区 | 成人免费视频一区二区| 国产日韩av一区| 成人性生交大片免费看视频在线 | 欧美日韩久久一区二区| 亚洲视频一区二区在线| 一本大道久久a久久精二百| 国产精品国产三级国产有无不卡| 日本欧洲一区二区| 日韩欧美国产一区二区三区| 日本人妖一区二区| 精品区一区二区| 国产精品夜夜爽| 国产精品久久久久影院老司| 99在线精品观看| 亚洲综合在线第一页| 在线不卡欧美精品一区二区三区| 中文字幕在线不卡国产视频| 91免费小视频| 亚洲高清不卡在线观看| 精品久久99ma| 成人精品一区二区三区四区 | 91福利精品视频| 日欧美一区二区| 精品久久久久久久久久久久久久久久久| 亚洲天堂成人网| 欧美三级韩国三级日本三斤| 理论电影国产精品| 国产精品久久久久久一区二区三区 | 91国产精品成人| 免费高清在线一区| 精品国产伦一区二区三区观看方式 | 欧美在线高清视频| 蜜桃视频免费观看一区| 久久综合网色—综合色88| 99久久久精品| 视频一区免费在线观看| 日本一区二区三区在线观看| 91黄视频在线观看| 极品美女销魂一区二区三区免费| 欧美久久久一区| 国产乱人伦偷精品视频免下载| 欧美肥大bbwbbw高潮| 成人在线视频一区| 亚洲国产精品麻豆| 精品国产一区二区三区久久影院 | 久久国内精品视频| 亚洲欧美日韩精品久久久久| 日韩一区二区三区电影在线观看| 亚洲午夜久久久久久久久电影网 | 99精品欧美一区二区蜜桃免费| 国产色综合一区| 欧美日韩一区二区三区免费看| 亚洲天天做日日做天天谢日日欢| 丁香五精品蜜臀久久久久99网站| 亚洲精品一区二区三区香蕉| 91免费版在线看| 精品一区二区三区欧美| 亚洲综合偷拍欧美一区色| 久久麻豆一区二区| 欧美日韩精品三区| www.视频一区| 精品一区二区精品| 一区二区在线电影| 中文字幕高清不卡| 26uuuu精品一区二区| 欧美高清激情brazzers| 色哟哟国产精品免费观看| 粉嫩av一区二区三区在线播放|