免费邀请码更改用户名领国庆勋章CRC32解密2.0回帖奖励召回投票记录删除领夜猫子帮助中心 本站已运行
查看: 59|回复: 0
收起左侧

易语言MASM汇编置入代码实现计算文本型与字节集的CRC64哈希散列校验码 (返回长整数型)

[复制链接]
发表于 2019-9-19 13:00:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x

  1. .版本 2

  2. .程序集 CRC64计算模块
  3. .程序集变量 CRC64表格, 长整数型, , "256"

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

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

  8. .子程序 _临时子程序

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

  10. 输出调试文本 (文本型_CRC64 (“Hello World! 中文测试”))  ' -5054682783160088820
  11. 输出调试文本 (字节集_CRC64 ({ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }))  ' 8819424803746763606


  12. .子程序 初始化CRC64
  13. .参数 表格, 长整数型, 参考 数组

  14. 置入代码 ({ 80, 83, 81, 82, 86, 139, 117, 8, 139, 54, 131, 198, 8, 51, 219, 235, 49, 51, 192, 51, 210, 138, 195, 50, 201, 235, 26, 138, 232, 128, 229, 1, 209, 234, 209, 216, 10, 237, 116, 11, 53, 66, 15, 135, 215, 129, 242, 149, 87, 108, 201, 254, 193, 128, 249, 8, 114, 225, 137, 4, 222, 137, 84, 222, 4, 67, 129, 251, 255, 0, 0, 0, 118, 199, 94, 90, 89, 91, 88 })
  15. ' push eax
  16. ' push ebx
  17. ' push ecx
  18. ' push edx
  19. ' push esi
  20. ' mov esi,[ebp+8]
  21. ' mov esi,[esi]
  22. ' add esi,8
  23. ' xor ebx,ebx
  24. ' .while ebx <= 255
  25. ' xor eax,eax
  26. ' xor edx,edx
  27. ' mov al,bl
  28. ' xor cl,cl
  29. ' .while cl < 8
  30. ' mov ch,al
  31. ' and ch,1
  32. ' shr edx,1
  33. ' rcr eax,1
  34. ' .if ch
  35. ' xor eax,-679014590
  36. ' xor edx,-915646571
  37. ' .endif
  38. ' inc cl
  39. ' .endw
  40. ' mov [esi+ebx*8],eax
  41. ' mov [esi+ebx*8+4],edx
  42. ' inc ebx
  43. ' .endw
  44. ' pop esi
  45. ' pop edx
  46. ' pop ecx
  47. ' pop ebx
  48. ' pop eax


  49. .子程序 CRC64_汇编, 长整数型
  50. .参数 数据, 字节集
  51. .参数 表格, 长整数型, 数组

  52. 置入代码 ({ 83, 81, 86, 87, 51, 192, 51, 210, 139, 117, 8, 11, 246, 117, 2, 235, 100, 139, 54, 11, 246, 117, 2, 235, 92, 139, 126, 4, 11, 255, 116, 8, 129, 255, 0, 0, 0, 128, 114, 2, 235, 75, 131, 198, 8, 184, 255, 255, 255, 255, 186, 255, 255, 255, 255, 51, 201, 235, 50, 138, 216, 50, 28, 49, 102, 81, 50, 201, 235, 6, 209, 234, 209, 216, 254, 193, 128, 249, 8, 114, 245, 102, 89, 81, 83, 129, 227, 255, 0, 0, 0, 139, 77, 12, 139, 9, 131, 193, 8, 51, 4, 217, 51, 84, 217, 4, 91, 89, 65, 59, 207, 114, 202, 247, 208, 247, 210, 95, 94, 89, 91, 201, 194, 8, 0 })
  53. ' push ebx
  54. ' push ecx
  55. ' push esi
  56. ' push edi
  57. ' xor eax,eax
  58. ' xor edx,edx
  59. ' mov esi,[ebp+8]
  60. ' .if !esi
  61. ' jmp ASM_END
  62. ' .endif
  63. ' mov esi,[esi]
  64. ' .if !esi
  65. ' jmp ASM_END
  66. ' .endif
  67. ' mov edi,[esi+4]
  68. ' .if !edi || edi >= 80000000H
  69. ' jmp ASM_END
  70. ' .endif
  71. ' add esi,8
  72. ' mov eax,-1
  73. ' mov edx,-1
  74. ' xor ecx,ecx
  75. ' .while ecx < edi
  76. ' mov bl,al
  77. ' xor bl,[esi+ecx]
  78. ' push cx
  79. ' xor cl,cl
  80. ' .while cl < 8
  81. ' shr edx,1
  82. ' rcr eax,1
  83. ' inc cl
  84. ' .endw
  85. ' pop cx

  86. ' ;and edx,0FFFFFFH
  87. ' push ecx
  88. ' push ebx
  89. ' and ebx,255
  90. ' mov ecx,[ebp+12]
  91. ' mov ecx,[ecx]
  92. ' add ecx,8
  93. ' xor eax,[ecx+ebx*8]
  94. ' xor edx,[ecx+ebx*8+4]
  95. ' pop ebx
  96. ' pop ecx
  97. ' inc ecx
  98. ' .endw
  99. ' not eax
  100. ' not edx
  101. ' ASM_END:
  102. ' pop edi
  103. ' pop esi
  104. ' pop ecx
  105. ' pop ebx
  106. ' leave
  107. ' retn 8
  108. 返回 (0)


  109. .子程序 字节集_CRC64, 长整数型, 公开
  110. .参数 字节集, 字节集

  111. 返回 (CRC64_汇编 (字节集, CRC64表格))

  112. .子程序 文本型_CRC64, 长整数型, 公开
  113. .参数 文本型, 文本型

  114. 返回 (CRC64_汇编 (到字节集 (文本型), CRC64表格))
复制代码

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则