在Assembly中将十进制数转换为十六进制数字符串

时间:2015-09-20 05:13:35

标签: assembly hex decimal

我需要做的是创建一个汇编源文件(2hex.s),以便能够在C程序(test2hex.c)上使用它。在2hex.s中,我需要创建一个函数来将十进制数转换为十六进制字符串。

这是test2hex.c文件:

#include<stdio.h>

void tohex(long x);

int main{
    tohex(1);    //Output: 0000000000000001
    tohex(1035); //Output: 000000000000040B
    tohex(-2);   //Output: FFFFFFFFFFFFFFFE
    return 0;
}

现在,我需要创建一个2hex.s文件来打印这些输出。我不知道怎么能这样做。以下是我的尝试:

    .global tohex
    .text
tohex:
    xor     %r10,%r10
    mov     $16, %r11
    mov     %rdi, %rax
    cqto
next:
    idiv    %r11
    cmp     $10, %rdx
    jg      lttrs
    mov     %rdx,%rcx
    add     $48,%rcx
    mov     %rcx, %rdi
    call    putchar
    inc     %r10
    cmp     $15, %r10
    jle     next
    jmp     exit
lttrs:
    mov     %rdx, %rcx
    add     $55, %rcx
    mov     %rcx, %rdi
    call    putchar
    inc     %r10
    cmp     $15, %r10
    jle     next
    jmp     exit
exit:
    ret

起初,当我在没有16次循环的情况下运行第二个函数(tohex(1035))时,我实际上能够得到字母B.但是,使用循环似乎已导致浮点异常错误。

还有一件事,我可以猜测结果会以我需要的相反顺序出现,那么我需要做些什么呢?

请帮帮我。

0 个答案:

没有答案