开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

楼主: jr21066
收起左侧

[易语言纯源码] 汇编极速分割文本演示带源码无模块

[复制链接]
结帖率:100% (11/11)
 楼主| 发表于 2018-9-13 12:46:48 | 显示全部楼层   陕西省渭南市
cf2006a 发表于 2018-9-13 09:29
  
子程序名返回值类型公开备 注
汇编_分割文本整数型 
[/quote]
写0a是没有必要的.只是一种完美心理了.
去掉0a的代码如下,未测试
[e=4]lea edx,[ebp+8]
mov edx,[edx]
mov edx,[edx]
mov ecx,[edx+4];字节集长度
add edx,8;文本字节集地址
lea ebx,[ebp+10h]
mov ebx,[ebx]
mov ebx,[ebx]
add ebx,4;数组成员数地址
mov eax,1;写入第一组内容
mov [ebx],eax
mov [ebx+4],edx
begin:
mov al,byte ptr [edx]
cmp al,13
jnz addr2;回车写回0
xor eax,eax
mov byte ptr [edx],al
inc edx
inc edx
mov eax,[ebx]
inc eax
mov [ebx],eax;成员数加一
shl eax,2
add eax,ebx
mov [eax],edx;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,[ebx];取成员数
leave
ret 12


回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 20 天

 楼主| 发表于 2018-9-13 12:46:12 | 显示全部楼层   陕西省渭南市
cf2006a 发表于 2018-9-13 09:29
  
子程序名返回值类型公开备 注
汇编_分割文本整数型 
[/quote]
写0a是没有必要的.只是一种完美心理了.
去掉0a的代码如下,未测试
[e=4]lea edx,[ebp+8]
mov edx,[edx]
mov edx,[edx]
mov ecx,[edx+4];字节集长度
add edx,8;文本字节集地址
lea ebx,[ebp+10h]
mov ebx,[ebx]
mov ebx,[ebx]
add ebx,4;数组成员数地址
mov eax,1;写入第一组内容
mov [ebx],eax
mov [ebx+4],edx
begin:
mov al,byte ptr [edx]
cmp al,13
jnz addr2;回车写回0
xor eax,eax
mov byte ptr [edx],al
inc edx
inc edx
mov eax,[ebx]
inc eax
mov [ebx],eax;成员数加一
shl eax,2
add eax,ebx
mov [eax],edx;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,[ebx];取成员数
leave
ret 12
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 20 天

 楼主| 发表于 2018-9-13 12:45:17 | 显示全部楼层   陕西省渭南市
cf2006a 发表于 2018-9-13 09:29
  
子程序名返回值类型公开备 注
汇编_分割文本整数型 
[/quote]
写0a是没有必要的.只是一种完美心理了.
去掉写0a的代码如下.未测试
[e=4]lea edx,[ebp+8]
mov edx,[edx]
mov edx,[edx]
mov ecx,[edx+4];字节集长度
add edx,8;文本字节集地址
lea ebx,[ebp+10h]
mov ebx,[ebx]
mov ebx,[ebx]
add ebx,4;数组成员数地址
mov eax,1;写入第一组内容
mov [ebx],eax
mov [ebx+4],edx
begin:
mov al,byte ptr [edx]
cmp al,13
jnz addr2;回车写回0
xor eax,eax
mov byte ptr [edx],al
inc edx
inc edx
mov eax,[ebx]
inc eax
mov [ebx],eax;成员数加一
shl eax,2
add eax,ebx
mov [eax],edx;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,[ebx];取成员数
leave
ret 12

回复 支持 反对

使用道具 举报

结帖率:97% (31/32)

签到天数: 22 天

发表于 2018-9-13 09:29:19 | 显示全部楼层   福建省福州市
本帖最后由 cf2006a 于 2018-9-13 10:04 编辑
  
子程序名返回值类型公开备 注
汇编_分割文本整数型 
参数名类 型参考可空数组备 注
参_文本内容字节集
参_文本数组文本型
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 139, 74, 4, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 199, 3, 1, 0, 0, 0, 137, 83, 4, 138, 2, 60, 13, 117, 11, 198, 2, 0, 66, 255, 3, 139, 3, 137, 20, 131, 66, 226, 236, 139, 3, 201, 194, 8, 0 })
返回 (0)

帮你优化了下不知道 对不对 看看会不会比之前的快



lea edx, dword [ebp+0x08]
mov edx, dword [edx]
mov edx, dword [edx]
mov ecx, dword [edx+0x04]
add edx, 0x08
lea ebx, dword [ebp+0x0C]
mov ebx, dword [ebx]
mov ebx, dword [ebx]
add ebx, 0x04
mov dword [ebx], 0x00000001
mov dword [ebx+0x04], edx                                     上面没动和你的一样    下面你用三个loop 我给你减掉两个
Label2:
mov al, byte [edx]
cmp al, 0x0D                                                             如果我没理解错的话找到13 开始在尾部加0截断文本  因为换行符 13 后面会跟一个10  所有13 这里截断就不会有换行符出现
jne Label1
mov byte [edx], 0x00000000
inc edx                                                                     这应加1后该是10  把10这个地址给 下个数组 当成开始的 位置  当然你也可以Edx加2直接给下个数据段开始地址给它不过我觉得没必要因为10                                                                                 是控制符是不会显示出来的对你文本输出调用时没什么影响的
inc dword [ebx]
mov eax, dword [ebx]
mov dword [ebx+eax*4], edx
Label1:
inc edx                                                                      这里10后面加1  是真正数据开始的位置 所有就可以把两个loop 简化成一个 不会影响取出的数据
loop Label2
mov eax, dword [ebx]
leave
retn 0x0008



回复 支持 反对

使用道具 举报

结帖率:97% (31/32)

签到天数: 22 天

发表于 2018-9-13 09:27:36 | 显示全部楼层   福建省福州市
jr21066 发表于 2018-9-12 21:39
13 10修改为0.做为字符串结束标记.
分隔符的下一个位置就是下一个字符串的开始位置写到文本数组的成员中 ...
  
子程序名返回值类型公开备 注
汇编_分割文本整数型 
参数名类 型参考可空数组备 注
参_文本内容字节集
参_文本数组文本型
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 139, 74, 4, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 199, 3, 1, 0, 0, 0, 137, 83, 4, 138, 2, 60, 10, 117, 13, 198, 2, 0, 66, 255, 3, 139, 3, 137, 20, 131, 226, 237, 66, 226, 234, 139, 3, 201, 194, 8, 0 })
返回 (0)
帮你优化了下代码你看下这样会不会更快些

回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 20 天

 楼主| 发表于 2018-9-12 21:39:32 | 显示全部楼层   陕西省渭南市
cf2006a 发表于 2018-9-12 21:33
[e=0].版本 2

.子程序 汇编_分割文本, 整数型

13 10修改为0.做为字符串结束标记.
分隔符的下一个位置就是下一个字符串的开始位置写到文本数组的成员中

0只需要一个.所以分隔符是可以有单字符的.多字符的话.判断太多.很影响效率.不想做了.越做越慢不如用系统的.还安全.
回复 支持 反对

使用道具 举报

结帖率:100% (11/11)

签到天数: 20 天

 楼主| 发表于 2018-9-12 21:36:58 | 显示全部楼层   陕西省渭南市
xxiaoshujjun 发表于 2018-9-12 21:13
找个只能按行数分割吗?如果我里面文本想按自己的特定符号怎么分?

随后增加.
可能是单字符的分隔
回复 支持 反对

使用道具 举报

结帖率:97% (31/32)

签到天数: 22 天

发表于 2018-9-12 21:33:50 | 显示全部楼层   福建省福州市
  
子程序名返回值类型公开备 注
汇编_分割文本整数型 
参数名类 型参考可空数组备 注
参_文本内容字节集
参_文本数组文本型
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 139, 74, 4, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 184, 1, 0, 0, 0, 137, 3, 137, 83, 4, 138, 2, 60, 13, 117, 3, 66, 226, 247, 60, 10, 117, 15, 49, 192, 136, 2, 66, 139, 3, 64, 137, 3, 137, 20, 131, 226, 228, 66, 226, 225, 139, 3, 201, 194, 8, 0 })
返回 (0)

大概知道了点意思 就是把 13 10 那个位置的指针 给数组 成员!
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2018-9-12 21:13:27 | 显示全部楼层   浙江省温州市
找个只能按行数分割吗?如果我里面文本想按自己的特定符号怎么分?
回复 支持 反对

使用道具 举报

发表于 2018-9-11 20:51:03 | 显示全部楼层   湖北省潜江市
看看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

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

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