|
- .版本 2
- .程序集 CRC64计算模块
- .程序集变量 CRC64表格, 长整数型, , "256"
- .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码
- 初始化CRC64 (CRC64表格)
- _临时子程序 () ' 在初始化代码执行完毕后调用测试代码
- 返回 (0) ' 可以根据您的需要返回任意数值
- .子程序 _临时子程序
- ' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
- 输出调试文本 (文本型_CRC64 (“Hello World! 中文测试”)) ' -5054682783160088820
- 输出调试文本 (字节集_CRC64 ({ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 })) ' 8819424803746763606
- .子程序 初始化CRC64
- .参数 表格, 长整数型, 参考 数组
- 置入代码 ({ 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 })
- ' push eax
- ' push ebx
- ' push ecx
- ' push edx
- ' push esi
- ' mov esi,[ebp+8]
- ' mov esi,[esi]
- ' add esi,8
- ' xor ebx,ebx
- ' .while ebx <= 255
- ' xor eax,eax
- ' xor edx,edx
- ' mov al,bl
- ' xor cl,cl
- ' .while cl < 8
- ' mov ch,al
- ' and ch,1
- ' shr edx,1
- ' rcr eax,1
- ' .if ch
- ' xor eax,-679014590
- ' xor edx,-915646571
- ' .endif
- ' inc cl
- ' .endw
- ' mov [esi+ebx*8],eax
- ' mov [esi+ebx*8+4],edx
- ' inc ebx
- ' .endw
- ' pop esi
- ' pop edx
- ' pop ecx
- ' pop ebx
- ' pop eax
- .子程序 CRC64_汇编, 长整数型
- .参数 数据, 字节集
- .参数 表格, 长整数型, 数组
- 置入代码 ({ 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 })
- ' push ebx
- ' push ecx
- ' push esi
- ' push edi
- ' xor eax,eax
- ' xor edx,edx
- ' mov esi,[ebp+8]
- ' .if !esi
- ' jmp ASM_END
- ' .endif
- ' mov esi,[esi]
- ' .if !esi
- ' jmp ASM_END
- ' .endif
- ' mov edi,[esi+4]
- ' .if !edi || edi >= 80000000H
- ' jmp ASM_END
- ' .endif
- ' add esi,8
- ' mov eax,-1
- ' mov edx,-1
- ' xor ecx,ecx
- ' .while ecx < edi
- ' mov bl,al
- ' xor bl,[esi+ecx]
- ' push cx
- ' xor cl,cl
- ' .while cl < 8
- ' shr edx,1
- ' rcr eax,1
- ' inc cl
- ' .endw
- ' pop cx
- ' ;and edx,0FFFFFFH
- ' push ecx
- ' push ebx
- ' and ebx,255
- ' mov ecx,[ebp+12]
- ' mov ecx,[ecx]
- ' add ecx,8
- ' xor eax,[ecx+ebx*8]
- ' xor edx,[ecx+ebx*8+4]
- ' pop ebx
- ' pop ecx
- ' inc ecx
- ' .endw
- ' not eax
- ' not edx
- ' ASM_END:
- ' pop edi
- ' pop esi
- ' pop ecx
- ' pop ebx
- ' leave
- ' retn 8
- 返回 (0)
- .子程序 字节集_CRC64, 长整数型, 公开
- .参数 字节集, 字节集
- 返回 (CRC64_汇编 (字节集, CRC64表格))
- .子程序 文本型_CRC64, 长整数型, 公开
- .参数 文本型, 文本型
- 返回 (CRC64_汇编 (到字节集 (文本型), CRC64表格))
复制代码 |
|