46 lines
965 B
C
46 lines
965 B
C
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
|
|
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;
|
|
}
|