将c语言转换为IA32汇编语言

时间:2014-10-12 17:15:09

标签: 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", 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;}

2 个答案:

答案 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