⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crt.c

📁 一个操作系统,用C语言实现开发的,我在一个浙江大学的操作系统实验网站找到.大家学习以下
💻 C
字号:
// C run-time Library for Applications

#include <sys/sysbase.h>

// Interfaces
long SysInvoke(_u32 uFunc, INVOKESTRUCT *pIS)
{
	asm volatile("movl 0(%%esi), %%ebx; movl 4(%%esi), %%ecx; movl 8(%%esi), %%edx\n"
				 "movl 16(%%esi), %%edi; pushl %%esi; movl 12(%%esi), %%esi\n"
				 "int $0x80\n"
				 "pushl %%esi; movl 4(%%esp), %%esi\n"
				 "movl %%ebx, 0(%%esi); movl %%ecx, 4(%%esi); movl %%edx, 8(%%esi)\n"
				 "movl %%edi, 16(%%esi); movl %%eax, 20(%%esi)\n"
				 "movl %%esi, %%eax; popl %%esi; movl %%esi, 12(%%eax); popl %%esi\n"
					::"S"(pIS), "a"(uFunc));
	return (long)pIS->uResult;
}

// Basic system
void SystemVersion(SYSVERSION *pVersion)
{
	INVOKESTRUCT is;
	SysInvoke(0, &is);
	if(pVersion)
	{
		pVersion->uVersion = is.uResult;
		pVersion->uBuild = is.ebx;
		pVersion->uTime1 = is.ecx;
		pVersion->uTime2 = is.edx;
	}
}

void ExitProcess(_u32 uExitCode)
{
	asm("int $0x80"::"a"(1), "d"(uExitCode));
}

// Local Memory Management
void* LocalAlloc(_u32 uSize)
{
	void *p;
	asm("int $0x80":"=a"(p):"a"(4), "c"(uSize));
	return p;
}

void LocalFree(void* ptr)
{
	asm("int $80"::"a"(5), "d"(ptr));
}

_u32 LocalSize(void *ptr)
{
	_u32 v;
	asm("int $80":"=a"(v):"a"(7), "d"(ptr));
	return v;
}

// File system
HANDLE CreateFile(const char *pszFileName, _u32 flags)
{
	CREATEFILESTRUCT cs;
	HANDLE v;
	cs.uSize	= sizeof(cs);
	cs.uFlags	= flags;
	asm("int $0x80":"=a"(v):"a"(64), "S"(pszFileName), "b"(&cs), "c"(sizeof(cs)));
	return v;
}

int ReadFile(HANDLE handle, void *pBuffer, int len)
{
	int v;
	asm("int $0x80":"=a"(v):"a"(65), "D"(pBuffer), "d"(handle), "c"(len));
	return v;
}

int WriteFile(HANDLE handle, const void *pBuffer, int len)
{
	int v;
	asm("int $0x80":"=a"(v):"a"(66), "S"(pBuffer), "d"(handle), "c"(len));
	return v;
}

void CloseFile(HANDLE handle)
{
	asm("int $0x80"::"a"(68), "d"(handle));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -