萧楚楠 发表于 2025-2-22 19:05
知道你在说啥,用这个嘎嘎快,汇编,而且不会因为双字节字符截断
[/quote ][e=0 ].版本 2 判断 (全_AVX2 ) 置入代码 ({ 51, 192, 139, 85, 8, 139, 18, 133, 210, 116, 60, 139, 202, 131, 226, 224, 197, 253, 87, 192, 197, 253, 116, 10, 197, 253, 215, 193, 131, 225, 31, 211, 232, 15, 188, 192, 117, 30, 139, 194, 3, 209, 197, 253, 87, 192, 131, 192, 32, 197, 253, 116, 8, 197, 253, 215, 201, 133, 201, 116, 241, 15, 188, 201, 43, 202, 3, 193, 197, 248, 119, 93, 194, 4, 0 })  判断 (全_SSE2 ) 置入代码 ({ 51, 192, 139, 85, 8, 139, 18, 133, 210, 116, 61, 139, 202, 131, 226, 240, 102, 15, 239, 192, 102, 15, 116, 2, 102, 15, 215, 192, 131, 225, 15, 211, 232, 15, 188, 192, 117, 34, 139, 194, 3, 209, 102, 15, 239, 192, 131, 192, 16, 102, 15, 111, 8, 102, 15, 116, 200, 102, 15, 215, 201, 133, 201, 116, 237, 15, 188, 201, 43, 202, 3, 193, 93, 194, 4, 0 })  置入代码 ({ 139, 69, 8, 139, 0, 133, 192, 116, 44, 141, 80, 3, 139, 40, 131, 192, 4, 141, 141, 255, 254, 254, 254, 247, 213, 35, 205, 129, 225, 128, 128, 128, 128, 116, 233, 247, 193, 128, 128, 0, 0, 117, 6, 193, 233, 16, 131, 192, 2, 208, 225, 27, 194, 93, 194, 4, 0 }) 返回 (0 )
[e=0].版本 2
.子程序 取文本长度_ASM, 整数型, , 取文本型数据的长度,不包含结束0。自动选择版本:AVX2、SSE2、80386
.参数 参_文本, 通用型, 参考, 文本变量或文本指针
.判断开始 (全_AVX2)
' AVX2对齐版
置入代码 ({ 51, 192, 139, 85, 8, 139, 18, 133, 210, 116, 60, 139, 202, 131, 226, 224, 197, 253, 87, 192, 197, 253, 116, 10, 197, 253, 215, 193, 131, 225, 31, 211, 232, 15, 188, 192, 117, 30, 139, 194, 3, 209, 197, 253, 87, 192, 131, 192, 32, 197, 253, 116, 8, 197, 253, 215, 201, 133, 201, 116, 241, 15, 188, 201, 43, 202, 3, 193, 197, 248, 119, 93, 194, 4, 0 })
' *** 缩略程序块 ***
' xor eax,eax
' mov edx,dword ptr [ebp+0x8]
' mov edx,dword ptr [edx]
' test edx,edx
' je end_2
' mov ecx,edx
' and edx,0xFFFFFFE0
' vxorpd ymm0,ymm0,ymm0
' vpcmpeqb ymm1,ymm0,yword ptr [edx]
' vpmovmskb eax,ymm1
' and ecx,0x1F
' shr eax,cl
' bsf eax,eax
' jne end_1
' mov eax,edx
' add edx,ecx
' vxorpd ymm0,ymm0,ymm0
' loop_:
' add eax,0x20
' vpcmpeqb ymm1,ymm0,yword ptr [eax]
' vpmovmskb ecx,ymm1
' test ecx,ecx
' je loop_
' bsf ecx,ecx
' sub ecx,edx
' add eax,ecx
' end_1:
' vzeroupper
' end_2:
' pop ebp
' ret 0x4
.判断 (全_SSE2)
' SSE2对齐版
置入代码 ({ 51, 192, 139, 85, 8, 139, 18, 133, 210, 116, 61, 139, 202, 131, 226, 240, 102, 15, 239, 192, 102, 15, 116, 2, 102, 15, 215, 192, 131, 225, 15, 211, 232, 15, 188, 192, 117, 34, 139, 194, 3, 209, 102, 15, 239, 192, 131, 192, 16, 102, 15, 111, 8, 102, 15, 116, 200, 102, 15, 215, 201, 133, 201, 116, 237, 15, 188, 201, 43, 202, 3, 193, 93, 194, 4, 0 })
' *** 缩略程序块 ***
' xor eax,eax
' mov edx,dword ptr [ebp+0x8]
' mov edx,dword ptr [edx]
' test edx,edx
' je end_
' mov ecx,edx
' and edx,0xFFFFFFF0
' pxor xmm0,xmm0
' pcmpeqb xmm0,xmmword ptr [edx]
' pmovmskb eax,xmm0
' and ecx,0xF
' shr eax,cl
' bsf eax,eax
' jne end_
' mov eax,edx
' add edx,ecx
' pxor xmm0,xmm0
' loop_:
' add eax,0x10
' movdqa xmm1,xmmword ptr [eax]
' pcmpeqb xmm1,xmm0
' pmovmskb ecx,xmm1
' test ecx,ecx
' je loop_
' bsf ecx,ecx
' sub ecx,edx
' add eax,ecx
' end_:
' pop ebp
' ret 0x4
.默认
' 80386版
置入代码 ({ 139, 69, 8, 139, 0, 133, 192, 116, 44, 141, 80, 3, 139, 40, 131, 192, 4, 141, 141, 255, 254, 254, 254, 247, 213, 35, 205, 129, 225, 128, 128, 128, 128, 116, 233, 247, 193, 128, 128, 0, 0, 117, 6, 193, 233, 16, 131, 192, 2, 208, 225, 27, 194, 93, 194, 4, 0 })
' *** 缩略程序块 ***
' mov eax,dword ptr [ebp+0x8]
' mov eax,dword ptr [eax]
' test eax,eax
' jz _end
' lea edx,dword ptr [eax+0x3]
' label_b:
' mov ebp,dword ptr [eax]
' add eax,4
' lea ecx,dword ptr [ebp-0x1010101]
' not ebp
' and ecx,ebp
' and ecx,0x80808080
' jz label_b
' test ecx,0x8080
' jnz label_f
' shr ecx,16
' add eax,2
' label_f:
' shl cl,1
' sbb eax,edx
' _end:
' pop ebp
' retn 0x4
.判断结束
返回 (0)
|