gpt4 book ai didi

创建用于读取整数的程序集的 C 程序

转载 作者:行者123 更新时间:2023-11-30 21:11:10 25 4
gpt4 key购买 nike

我想使用 x86 的内联汇编语言程序以及用于 GCC 汇编器的 int $128 (软件中断)来创建一个 C 库,用于读取整数输入。如何进行?

要打印我使用过的整数:-

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

同样我想知道如何读取整数。

最佳答案

你的asm语句需要一个clobber列表,因为它修改eax和ebx,并且依赖于未列为输入的内存内容(buff的内容,只有buff的地址被列为输入)。目前编译器会假设它没有。

__asm__ __volatile__ (
"movl $4, %%eax \n\t"
"movl $1, %%ebx \n\t"
"int $128 \n\t"
:
:"c"(buff), "d"(bytes)
:"%eax", "%ebx", "memory"
)

关于创建用于读取整数的程序集的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com