#include #include int getchar() { register char c asm("al"); asm volatile("movb $0x00, %%ah\n\t" "int $0x16" : "=r"(c)::"ah", "cc"); return c; } int putchar(int c) { asm volatile("push %%bp \n\t" "mov %0, %%ax \n\t" "movb $0x0e, %%ah \n\t" "movb $0, %%bh \n\t" "int $0x10 \n\t" "pop %%bp \n\t" ::"r"(c) : "ax", "bh", "cc"); return 0; } int puts(const char* s) { while (*s) { putchar(*s++); } return 0; } void* memcpy(void* dest, const void* src, size_t n) { uint8_t* d = dest; const uint8_t* s = src; for (int i = 0; i < n; i++) { d[i] = s[i]; } return dest; } void* memset(void* ptr, int val, size_t len) { uint8_t* p = ptr; while (len--) { *p++ = val; } return ptr; }