初学x64汇编,渣程序求喷
.file "u64hex.c".text
.p2align 4,,15
.globl u64hex
.type u64hex, @function
u64hex:
.LFB2:
# uint64_t u64hex(char hex, 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,"",@progbitsC函数:uint64_t u64hex(char hex, uint64_t b)
功能,转化一个64位无符号整数到HEX形式字串
输入参数:b
输出参数:hex
返回值:到最高有效数字的偏移
举例(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, uint64_t b)
{
return 0;
}
然后gcc -Wall -O2 -S
然后编辑.LFB2后面的内容
页:
[1]