我需要做的是创建一个汇编源文件(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.但是,使用循环似乎已导致浮点异常错误。
还有一件事,我可以猜测结果会以我需要的相反顺序出现,那么我需要做些什么呢?
请帮帮我。