我写了一个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", 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;}
答案 0 :(得分:2)
如果你的编译器是gcc,this answer提出了一种很好的方法来生成一个比普通汇编更容易阅读的组合C /汇编语言文件。他们使用c ++,但只需将c++
替换为gcc
:
# create assembler code:
gcc -S -fverbose-asm -g original.c -o assembly.s
# create asm interlaced with source lines:
as -alhnd assembly.s > listing.lst
答案 1 :(得分:0)
符合SUSv2(1997年发布的单Unix规范版本2)的C编译器可以通过使用locale标志说明符更简单地执行您想要的操作。以下是使用gcc的示例C代码:
#include <stdio.h>
#include <locale.h>
int main()
{
int num = 12345678;
setlocale(LC_NUMERIC, "en_US");
printf("%'d\n", num);
return 0;
}
这会打印12,345,678
。另请注意,这对于负数而言是正确的,而您的代码却没有。因为代码只是一个库调用,所以它可能不值得用汇编语言实现,但是如果你仍然关心,你可以使用它:
在.rodata
部分中包含此字符串常量:
.fmt:
.string "%'d\n"
代码非常简单,因为所有艰苦工作都在printf
内完成:
; number to be converted is in %esi
movl $.fmt, %edi
movl $0, %eax
call printf