本帖最后由 cf2006a 于 2020-9-2 15:42 编辑
.版本 2
.子程序 文本_长度, 整数型, , 空文本返回0 repne scasb 测试下这两个命令用法
.参数 参_文本, 文本型
置入代码 ({ 49, 192, 139, 125, 8, 139, 63, 133, 255, 116, 14, 185, 255, 255, 255, 255, 242, 174, 184, 254, 255, 255, 255, 41, 200, 201, 194, 4, 0 })
返回 (0)
' xor eax,eax eax清零 这里要用到al 清零后al=0
' mov edi, dword [ebp+0x08] 取文本地址
' mov edi, dword [edi] 取文本地址
' test edi,edi 判断变量是否为空
' je lab 如果传递的变量为空跳出 结束
' mov ecx,-1 这里ecx用来计次用每比较一次减去1,这里初始值是-1 因为如果是0的话就结束循环所以不能填0
' repne scasb 这里比较edi指向的文本每次取一个字节来和al做比较 这里 al始终是0 因为文本最后一个字符是0 所以遇到0文本就结束了
' mov eax,-2 汇编是从0开始 而易语言文本长度是从1开始 所以给eax个 -2 初始值
' sub eax, ecx ecx判断结束的值是负数也就是文本到结束的长度 eax -2 - ecx 负负得正后就是文本实际长度
' lab:
' leave 堆栈平衡下
' retn 0x04 返回4个字节整数数据
速度对比了下和核心库差不多没什么效率只是做个笔记
|