【发布时间】:2014-10-02 15:15:38
【问题描述】:
我想使用 x86 的内联汇编语言程序和 int $128(软件中断)在 C 中创建一个库,供 GCC 汇编程序读取整数输入。如何进行?
要打印我使用过的整数:-
#define BUFF 20
int print_int(int n){ // print_int.c
char buff[BUFF], zero='0';
int i=0, j, k, bytes;
if(n == 0) buff[i++]=zero;
else{
if(n < 0) {
buff[i++]='-';
n = -n;
}
while(n){
int dig = n%10;
buff[i++] = (char)(zero+dig);
n /= 10;
}
if(buff[0] == '-')
j = 1;
else
j = 0;
k=i-1;
while(j<k){
char temp=buff[j];
buff[j++] = buff[k];
buff[k--] = temp;
}
}
buff[i]='\n';
bytes = i+1;
__asm__ __volatile__ (
"movl $4, %%eax \n\t"
"movl $1, %%ebx \n\t"
"int $128 \n\t"
:
:"c"(buff), "d"(bytes)
) ; // $4: write, $1: on stdin
return bytes-1;
}
同样我想知道读取整数。
【问题讨论】:
-
为什么需要这样做?
-
print_int(int n) { printf("%d\n", n); }read_int(int *n) { scanf("%d", n); } -
这给了你什么?如果不是您想要的,您具体想要制作什么?
-
我不想使用标准库,而是使用带有软件中断的内联汇编语言(使用 asm volatile)
-
首先缩进你的代码。
标签: c interrupt inline-assembly