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

📄 stdlib.h

📁 Jazmyn is a 32-bit, protected mode, multitasking OS which runs on i386 & above CPU`s. Its complete
💻 H
字号:
#ifndef _STDLIB_H
#define _STDLIB_H

#include "sys\types.h"
#include "null.h"
#include "string.h"

#define cli()   __asm__("cli")
#define sti()   __asm__("sti")
#define nop()   __asm__("nop")

#ifdef __cplusplus
extern "C" {
#endif

static inline byte inportb(short __p)
{
	byte __v;
	__asm__ __volatile__("inb %%dx,%%al":"=a" (__v):"d" (__p));
	return __v;
}

static inline byte inport(short __p)
{
	WORD __v;
	__asm__ __volatile__("inw %%dx,%%ax":"=a" (__v):"d" (__p));
	return __v;
}

static inline void outportb(short __p,byte __v)
{
	__asm__ __volatile__("outb %%al,%%dx"::"a" (__v),"d" (__p));
}

static inline void* memset(void* __b,char __v,int __n)
{
        __asm__ __volatile__("cld;rep stosb"::"a" (__v),"D" (__b),"c" (__n));
        return __b;
}

static inline void* memset_w(void *__b,ushort __v,int __n)
{
        __asm__ __volatile__("cld;rep stosw"::"a" (__v),"D" (__b),"c" (__n));
        return __b;
}
        
static inline void* memmove(void *__d,void *__s,int __n)
{
        if(__d == __s || __n <= 0) return NULL;
        if(__d<__s) __asm__ __volatile__("cld;rep movsb"::"c" (__n),"S" (__s), "D" (__d));
        else __asm__ __volatile__("std;rep movsb"::"c" (__n),"S" ((int)__s+__n-1),"D" ((int)__d+__n-1));
        return __d;
}

static inline void* memcpy(void *__d,void *__s,int __n)
{
	if(__d == __s || __n <= 0) return NULL;
	__asm__ __volatile__("cld;rep movsb"::"c" (__n),"S" (__s),"D" (__d));
	return __d;
}

static inline char* itoa(int __v,char *__s,int __r)
{
	  int i = 0;	
        if(__v == 0) {__s[0] = '0';__s[1] = '\0';return __s;}
        if(__v < 0 ) {__s[i++] = '-';__v = -__v;}
        while(__v > 0)
        {
                __s[i++] = __v % __r;
                __v = __v / __r;
        }
        __s[i] = '\0';
        return strrev(__s);
}

static inline uint pow(int __b,int __p)
{
        uint __ret = 1;
        for(int i=0;i<__p;i++) __ret = __ret * __b;
        return __ret;
}

static inline int	atoi(char *__s)
{
	int __ret = 0,exp = 0;
	int len = strlen(__s);
	int k = (__s[0] == '-') ? 1 : 0;
	for(int i=len-1;i>=k;i--)
	{
		__ret += (__s[i]- 0x30) * pow(10,exp);
		exp++;
	}
	return (__s[0] == '-') ? -__ret : __ret;
}

static inline int atoin(char *__s,int __n)
{
	int __ret = 0,exp = 0;
	int len = __n + 1;
	int k = (__s[0] == '-') ? 1 : 0;
	for(int i=len-1;i>=k;i--)
	{
		__ret += (__s[i]- 0x30) * pow(10,exp);
		exp++;
	}
	return (__s[0] == '-') ? -__ret : __ret;

}

static inline void insd(short __p,void *__b,int __n)
{
	__asm__ __volatile__("cld;rep insl"::"d" (__p),"D" ((uint)__b),"c" (__n));
}

static inline void outsd(short __p,void *__b,int __n)
{
	__asm__ __volatile__("cld;rep outsl"::"d" (__p),"S" ((uint)__b),"c" (__n));
}

static inline void insw(short __p,void *__b,int __n)
{
	__asm__ __volatile__("cld;rep insw"::"d" (__p),"D" ((uint)__b),"c" (__n));
}

static inline void outsw(short __p,void *__b,int __n)
{
	__asm__ __volatile__("cld;rep outsw"::"d" (__p),"S" ((uint)__b),"c" (__n));
}

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

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