- 论坛徽章:
- 1
|
- .file "u64hex.c"
- .text
- .p2align 4,,15
- .globl u64hex
- .type u64hex, @function
- u64hex:
- .LFB2:
- # uint64_t u64hex(char hex[16], uint64_t b)
- # %rdi, %rsi
- xorq %rcx, %rcx
- xorq %rdx, %rdx
- xorq %r8, %r8
- movq $1, %r9
- movq $87, %r10
- .L8:
- rol $4, %rsi
- movq $15, %rax
- and %rsi, %rax
- cmp $0, %rax
- cmovg %r8, %r9
- add %r9, %rdx
- cmp $9, %rax
- movq $48, %r11
- cmovg %r10, %r11
- add %r11, %rax
- movb %al, (%rdi, %rcx, 1)
- inc %rcx
- cmp $16, %rcx
- jne .L8
- movq %rdx, %rax
- ret
- .LFE2:
- .size u64hex, .-u64hex
- .section .eh_frame,"a",@progbits
- .Lframe1:
- .long .LECIE1-.LSCIE1
- .LSCIE1:
- .long 0x0
- .byte 0x1
- .string "zR"
- .uleb128 0x1
- .sleb128 -8
- .byte 0x10
- .uleb128 0x1
- .byte 0x3
- .byte 0xc
- .uleb128 0x7
- .uleb128 0x8
- .byte 0x90
- .uleb128 0x1
- .align 8
- .LECIE1:
- .LSFDE1:
- .long .LEFDE1-.LASFDE1
- .LASFDE1:
- .long .LASFDE1-.Lframe1
- .long .LFB2
- .long .LFE2-.LFB2
- .uleb128 0x0
- .align 8
- .LEFDE1:
- .ident "GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-51)"
- .section .note.GNU-stack,"",@progbits
复制代码 C函数:uint64_t u64hex(char hex[16], uint64_t b)
功能,转化一个64位无符号整数到HEX形式字串
输入参数:b
输出参数:hex[16]
返回值:到最高有效数字的偏移
举例(1):
输入:b = 0x1
输出:hex[] = "0000000000000001"
返回值:15
举例(2):
输入:b = 0xFFFFFF00000000
输出:hex[] = "00FFFFFF00000000"
返回值:2
举例(3):
输入:b = 0xFFFFFFFF00000000
输出:hex[] = "FFFFFFFF00000000"
返回值:0
代码是这样写的,先写了个叫u64hex.c的文件,里面就4行
#include <stdint.h>
uint64_t u64hex(char hex[16], uint64_t b)
{
return 0;
}
然后gcc -Wall -O2 -S
然后编辑.LFB2后面的内容 |
|