将c语言转换为IA32汇编语言
我写了一个c代码:将整数转换成字符串,每3位有一个逗号,谁能给我一个如何将它转换成汇编语言的提示??? 我只想简单地把它转换成汇编语言!无法使用其他库调用将c语言转换为IA32汇编语言,c,assembly,C,Assembly,我写了一个c代码:将整数转换成字符串,每3位有一个逗号,谁能给我一个如何将它转换成汇编语言的提示??? 我只想简单地把它转换成汇编语言!无法使用其他库调用 #include <stdio.h> char *my_itoa(int n, char *buf) { int i, j, k=0, l=0; char tmp[32] = {0}; i = n; do { j = i%10; i = i/10; sprintf(tmp+k, "%d",
#include <stdio.h>
char *my_itoa(int n, char *buf)
{
int i, j, k=0, l=0;
char tmp[32] = {0};
i = n;
do {
j = i%10;
i = i/10;
sprintf(tmp+k, "%d", j);
k++;
l++;
if (i!=0 && l%3 == 0) {
sprintf(tmp+k, ",");
k++;
l = 0;
}
}while(i);
for (k--,i=0; i<=k; i++) {
buf[i] = tmp[k-i];
}
return buf;}
如果您的编译器是gcc,则建议使用一种很好的方法来生成比普通汇编更易于阅读的组合C/汇编语言文件。他们使用C++,而只是用GCC:< /P>替换C++。
#include <stdio.h>
#include <locale.h>
int main()
{
int num = 12345678;
setlocale(LC_NUMERIC, "en_US");
printf("%'d\n", num);
return 0;
}
符合1997年发布的SUSv2 Single Unix规范版本2的C编译器可以通过使用区域设置标志说明符更简单地完成所需的工作。下面是使用gcc的示例C代码:
#include <stdio.h>
#include <locale.h>
int main()
{
int num = 12345678;
setlocale(LC_NUMERIC, "en_US");
printf("%'d\n", num);
return 0;
}
代码非常简单,因为所有的艰苦工作都在printf中完成:
例如,您可以使用gcc编译它,并使用-S标志转储生成的程序集。请注意,这可能非常复杂,因为sprintf可能是一个动态库函数。@ChrisStratton,对库函数的调用看起来像调用sprintf。它到底是如何工作的??打电话给sprintf,找出sprintf的位置是a的工作。有关详细信息,请参阅链接。
.fmt:
.string "%'d\n"
; number to be converted is in %esi
movl $.fmt, %edi
movl $0, %eax
call printf