免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2455 | 回复: 0
打印 上一主题 下一主题

初学x64汇编,渣程序求喷 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-19 16:12 |只看该作者 |倒序浏览
  1.         .file        "u64hex.c"
  2.         .text
  3.         .p2align 4,,15
  4. .globl u64hex
  5.         .type        u64hex, @function
  6. u64hex:
  7. .LFB2:
  8. # uint64_t u64hex(char hex[16], uint64_t b)
  9. #                       %rdi,       %rsi
  10.         xorq        %rcx, %rcx
  11.         xorq        %rdx, %rdx
  12.         xorq        %r8, %r8
  13.         movq        $1, %r9
  14.         movq        $87, %r10
  15. .L8:
  16.         rol        $4, %rsi
  17.         movq        $15, %rax
  18.         and        %rsi, %rax
  19.         cmp        $0, %rax
  20.         cmovg        %r8, %r9
  21.         add        %r9, %rdx
  22.         cmp        $9, %rax
  23.         movq        $48, %r11
  24.         cmovg        %r10, %r11
  25.         add        %r11, %rax
  26.         movb        %al, (%rdi, %rcx, 1)
  27.         inc        %rcx
  28.         cmp        $16, %rcx
  29.         jne        .L8
  30.         movq        %rdx, %rax
  31.         ret
  32. .LFE2:
  33.         .size        u64hex, .-u64hex
  34.         .section        .eh_frame,"a",@progbits
  35. .Lframe1:
  36.         .long        .LECIE1-.LSCIE1
  37. .LSCIE1:
  38.         .long        0x0
  39.         .byte        0x1
  40.         .string        "zR"
  41.         .uleb128 0x1
  42.         .sleb128 -8
  43.         .byte        0x10
  44.         .uleb128 0x1
  45.         .byte        0x3
  46.         .byte        0xc
  47.         .uleb128 0x7
  48.         .uleb128 0x8
  49.         .byte        0x90
  50.         .uleb128 0x1
  51.         .align 8
  52. .LECIE1:
  53. .LSFDE1:
  54.         .long        .LEFDE1-.LASFDE1
  55. .LASFDE1:
  56.         .long        .LASFDE1-.Lframe1
  57.         .long        .LFB2
  58.         .long        .LFE2-.LFB2
  59.         .uleb128 0x0
  60.         .align 8
  61. .LEFDE1:
  62.         .ident        "GCC: (GNU) 4.1.2 20080704 (Red Hat 4.1.2-51)"
  63.         .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后面的内容
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP