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; }