32 lines
648 B
C
32 lines
648 B
C
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;
|
|
}
|