哪一部分給你造成麻煩?從標準輸入讀取數據使用read
系統調用(見here的系統調用在x86 Linux的列表)相似,你使用write
打印的方式進行:實施
int my_fgets(char* s, int size, int fd) {
int nread;
__asm__ __volatile__(
"int $0x80\n\t"
: "=a" (nread)
: "a" (3), "b" (fd), "c" (s), "d" (size)
);
return nread;
}
自己getchar
(你應該所以慾望)使用上述功能是直截了當的。
如果它是你遇到與,它可以使用上面的函數來完成的麻煩整數的「掃描」和閱讀:
#define MY_STDIN 0
int read_int() {
char buffer[256];
int nr, number;
nr = my_fgets(buffer, sizeof(buffer), MY_STDIN);
if (nr < 1) {
/* error */
}
buffer[nr - 1] = 0; // overwrite newline
__asm__ __volatile__(
"mov $0, %0\n\t" // initialize result to zero
"1:\n\t" // inner loop
"movzx (%%esi), %%eax\n\t" // load character
"inc %%esi\n\t" // increment pointer
"and %%eax, %%eax\n\t"
"jz 2f\n\t" // if character is NUL, done
"sub $'0', %%eax\n\t" // subtract '0' from character
"add %%eax, %0\n\t" // add to result
"jmp 1b\n\t" // loop
"2:\n\t"
: "=q" (number)
: "S" (buffer)
: "eax" // clobber eax
);
return number;
}
由於這是功課上述功能不全,將只適用於數字0到9,但擴展它應該是微不足道的。
爲什麼你不能使用scanf? –
@keith thatz我們的任務 – bazinga
@jonsca我不能使用getchar,因爲它是stdio.h的一個函數。 – bazinga