设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 2153|回复: 0
收起左侧

十进制整数到十六进制文本转换置入代码实现 支持大小写 自带补0 比核心库快20~40倍

[复制链接]
发表于 2018-9-23 09:57:55 | 显示全部楼层 |阅读模式

  1. .版本 2
  2. .支持库 spec

  3. .程序集 程序集1

  4. .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码


  5. _临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
  6. 返回 (0)  ' 可以根据您的需要返回任意数值

  7. .子程序 _临时子程序
  8. .局部变量 结果, 文本型
  9. .局部变量 计数, 整数型
  10. .局部变量 时间, 整数型

  11. ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。

  12. 结果 = 取空白文本 (8)

  13. 时间 = 取启动时间 ()
  14. .计次循环首 (1000000, 计数)
  15.     十到十六 (计数, 真, 结果)
  16. .计次循环尾 ()
  17. 调试输出 (“置入代码耗时:”, 取启动时间 () - 时间)

  18. 时间 = 取启动时间 ()
  19. .计次循环首 (1000000, 计数)
  20.     取十六进制文本 (计数)

  21. .计次循环尾 ()
  22. 调试输出 (“支持库耗时:”, 取启动时间 () - 时间)
  23. 时间 = 取启动时间 ()
  24. .计次循环首 (1000000, 计数)
  25.     十到十六_旧 (计数, 真, 结果)
  26. .计次循环尾 ()
  27. 调试输出 (“易代码耗时:”, 取启动时间 () - 时间)
  28. 校验 ()
  29. 调试输出 (“校验完成”)

  30. .子程序 校验
  31. .局部变量 置入代码结果, 文本型
  32. .局部变量 易代码结果, 文本型
  33. .局部变量 计数, 整数型
  34. .局部变量 大写, 逻辑型

  35. 置入代码结果 = 取空白文本 (8)
  36. .变量循环首 (-50000, 50000, 1, 计数)
  37.     大写 = 位与 (计数, 1) = 1

  38.     十到十六 (计数, 大写, 置入代码结果)
  39.     十到十六_旧 (计数, 大写, 易代码结果)
  40.     检查 (置入代码结果 = 易代码结果)

  41.     十到十六 (计数, 大写 = 假, 置入代码结果)
  42.     十到十六_旧 (计数, 大写 = 假, 易代码结果)
  43.     检查 (置入代码结果 = 易代码结果)

  44. .变量循环尾 ()

  45. .子程序 十到十六, , 公开, 将十进制整数型转换成十六进制的文本(开头为0则补0),比核心库快20多倍。
  46. .参数 值, 整数型, , 欲转换成十六进制的整数值
  47. .参数 大写, 逻辑型, , 是否对结果文本以大写输出
  48. .参数 结果文本, 文本型, 参考, 此文本必须为8字节的文本型,操作前必须对变量进行 取空白文本(8),否则会出错。

  49. 置入代码 ({ 139, 69, 8, 138, 77, 12, 128, 229, 1, 128, 249, 1, 114, 4, 177, 55, 235, 2, 177, 87, 139, 93, 16, 139, 27, 139, 211, 131, 195, 7, 235, 15, 80, 36, 15, 232, 15, 0, 0, 0, 136, 3, 88, 75, 193, 232, 4, 59, 211, 118, 237, 201, 194, 12, 0, 36, 15, 60, 0, 114, 8, 60, 9, 119, 4, 4, 48, 235, 2, 2, 193, 195 })
  50. ' mov eax,[ebp+8]
  51. ' mov cl,[ebp+12]
  52. ' and ch,1
  53. ' .if cl >= 1
  54. ' mov cl,037H
  55. ' .elseif
  56. ' mov cl,057H
  57. ' .endif
  58. ' mov ebx,[ebp+16]
  59. ' mov ebx,[ebx]
  60. ' mov edx,ebx
  61. ' add ebx,7
  62. ' .while edx <= ebx
  63. ' push eax
  64. ' and al,15
  65. ' CALL DEC2HEX
  66. ' mov [ebx],al
  67. ' pop eax
  68. ' dec ebx
  69. ' shr eax,4
  70. ' .endw
  71. ' leave
  72. ' retn 12
  73. ' DEC2HEX:
  74. ' AND AL,0FH
  75. ' .if al >=0 && al <=9
  76. ' ADD AL,30H
  77. ' .else
  78. ' ADD AL,CL
  79. ' .endif
  80. ' RET

  81. .子程序 十到十六_旧, , , 新版比旧版快300多倍
  82. .参数 值, 整数型
  83. .参数 大写, 逻辑型
  84. .参数 结果, 文本型, 参考

  85. 结果 = 取十六进制文本 (值)
  86. 结果 = 取重复文本 (8 - 取文本长度 (结果), “0”) + 结果
  87. 结果 = 选择 (大写, 到大写 (结果), 到小写 (结果))
复制代码


相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-25 22:25 , Processed in 1.078061 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表