safedead 发表于 2012-01-19 16:12

初学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]
查看完整版本: 初学x64汇编,渣程序求喷