开启辅助访问

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

汇编极速分割文本演示带源码无模块

查看数: 14389 | 评论数: 71 | 收藏 22
关灯 | 提示:支持键盘翻页 & lt;-左 右 ->
    组图打开中,请稍候......
发布时间: 2018-9-10 22:30

正文摘要:

易语言的分割文本速度真的慢.偏偏论坛里经常有人在用这个功能.这几天基本都没抢回帖.一直在折腾这个了. 过程跳过,最后的结果是这样.不能变成一个很完整的模块功能,在使用上有一点点小限制.但我觉得还是有实用价值的. ...

回复

13804061190   辽宁省沈阳市 发表于 2020-1-7 21:34:08
作者吱吱吱吱吱吱吱吱
0312   广东省广州市 发表于 2019-8-16 00:43:05
66666666666666
tasbox   陕西省西安市 发表于 2019-6-16 13:34:57
很快  使用,比自带的快很多了
遵义静以修身   贵州省遵义市 发表于 2019-5-1 13:27:09
感谢大神分享
a3960382663   湖南省邵阳市 发表于 2019-4-5 00:31:54
全汇编文本操作模块速度
carmen9804   四川省广元市 发表于 2019-3-3 20:12:19
jr21066   陕西省渭南市 发表于 2018-10-22 17:11:23
未离吖 发表于 2018-10-22 16:44
大佬,为啥我运行的时候执行两次分割就会崩啊嘤嘤嘤

分割不会出错.但数组成员没有分配内存就不行.

两种.一种是在最开始就设置一个大的成员数.
第二种时在子程序返回前将数组重定义回0
未离吖   广东省深圳市 发表于 2018-10-22 16:44:31
大佬,为啥我运行的时候执行两次分割就会崩啊嘤嘤嘤
jr21066   陕西省渭南市 发表于 2018-9-29 14:18:34
加上分隔符参数了.使用时注意第一条指令一定是 取数组成员数()

  
子程序名返回值类型公开备 注
汇编_分割文本 快速分割文本
参数名类 型参考可空数组备 注
参_内容字节集字节集待分割文本
参_文本数组文本型请在第一条语句执行取数组成员数来分配数组内存
参_分隔符字节集分割符,可空
变量名类 型静态数组备 注
局_内容字节集使用局部变量,不再破坏参数内容,会增加内存使用
' 如果内容为空,返回
如果真 (取字节集长度 (参_内容) = 0)
返回 ()
' 默认使用换行符分割
如果真 (是否为空 (参_分隔符))
参_分隔符 = { 13, 10 }
局_内容 = 参_内容
' 补齐分隔符
如果真 (取字节集右边 (局_内容, 取字节集长度 (参_分隔符)) ≠ 参_分隔符)
局_内容 = 局_内容 + 参_分隔符
' 将变量地址传到代码里,这个是可以直接取的.如果命令取的话.局部变量的存放位置就可以随意调整了
取变量地址 (局_内容)
置入代码 ({ 137, 195, 139, 27, 139, 75, 4, 141, 123, 8, 139, 69, 16, 139, 0, 139, 80, 4, 139, 69, 12, 139, 24, 131, 195, 4, 49, 192, 137, 3, 255, 3, 137, 123, 4, 252, 139, 69, 16, 139, 0, 141, 112, 8, 172, 242, 174, 227, 35, 65, 79, 81, 137, 209, 78, 243, 166, 117, 19, 137, 209, 49, 192, 41, 215, 243, 170, 255, 3, 139, 3, 193, 224, 2, 1, 216, 137, 56, 89, 41, 215, 71, 226, 208, 139, 69, 16, 139, 0, 138, 64, 8, 58, 71, 255, 116, 4, 255, 11, 235, 5, 49, 192, 137, 71, 255 })
' ------------------使用说明----------------------
' 代码调用前需要两个变量.一个是字节集的等分割内容.第二个是文本数组,需要提前定义成员数并在第一条命令执行 取数组成员数(文本数组) 来分配内存
' 代码调用完成后,形成映像文本数组,实际内容存放在第一个字节集变量中.两者配合形成真正的数组.在使用完成前不要修改第一个变量的值.
' 测试时发现很多奇怪的分隔符,所以分隔符使用字节集了.方便调试和调用.
' mov ebx, eax  传进来的局部变量地址
' mov ebx, dword [ebx]  取指针地址
' mov ecx, dword [ebx+0x04]  取字节集长度
' lea edi, dword [ebx+0x08]  取内容开始地址
' mov eax, dword [ebp+0x10]  取分隔符地址
' mov eax, dword [eax]
' mov edx, dword [eax+0x04]  取分隔符长度
' mov eax, dword [ebp+0x0C]  取数组地址
' mov ebx, dword [eax]
' add ebx, 0x04  保存数组成员数地址
' xor eax, eax
' mov dword [ebx], eax  重置数组成员数
' inc dword [ebx]  加入第一位成员
' mov dword [ebx+0x04], edi  第一位成员地址指针
' cld
' Label3:
' mov eax, dword [ebp+0x10]  取分隔符
' mov eax, dword [eax]
' lea esi, dword [eax+0x08]
' lodsb
' repne scasb  扫描分隔符
' jecxz Label1  内容扫描结束
' inc ecx  退回一格进行完整的分隔符比较
' dec edi
' push ecx  保存计数
' mov ecx, edx  分隔符长度
' dec esi
' rep cmpsb  比较分隔符
' jne Label2  不是分隔符,跳
' mov ecx, edx  将分隔符填充为0
' xor eax, eax
' sub edi, edx
' rep stosb
' inc dword [ebx]  成员数加一
' mov eax, dword [ebx]  取数组成员数
' shl eax, 0x02  计算数组成员指针地址
' add eax, ebx
' mov dword [eax], edi  写数据地址指针到成员表
' Label2:
' pop ecx  恢复计数
' sub edi, edx  修正指针位置
' inc edi
' loop Label3  循环处理
' Label1:
' mov eax, dword [ebp+0x10]  如果是单字节分隔符时
' mov eax, dword [eax]
' mov al,byte ptr  [eax+0x08]
' cmp al,byte ptr [edi-1]  比较是否是分隔符
' jz addr3
' dec dword [ebx]  不符合时减去开始增加的那个分隔符
' jmp addrend
' addr3:
' xor eax,eax  写文本结束符
' mov [edi-1],eax
' addrend:



i支持库列表   支持库注释   
spec特殊功能支持库

点评

数组如果不预定义的话.需要在使用前进行数组重定义.并且在使用完数组后再次使用数组重定义将成员数去掉.不然易会傻傻的去释放没有申请的内存.会报错的.   陕西省渭南市  发表于 2018-10-1 10:20
发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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