开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 705|回复: 28
收起左侧

[易语言纯源码] 【蠢新学汇编】多个数组取最大成员

[复制链接]
结帖率:100% (3/3)
发表于 2025-3-8 01:56:53 | 显示全部楼层 |阅读模式   贵州省毕节市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
几个数组要比较成员数的多少,有没有快捷的办法?
https://bbs.125.la/forum.php?mod=viewthread&tid=14850121
(出处: 精易论坛)
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
数组一整数型68 
数组二整数型81 
数组三整数型618 

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
调试输出 (数组取最大成员 (数组一, 数组二, 数组三))
子程序名返回值类型公开备 注
数组取最大成员整数型 参数类型无所谓可以随便改 参数个数无所谓可以随便加
参数名类 型参考可空数组备 注
参数一整数型
参数二整数型
参数三整数型
变量名类 型静态数组备 注
共几组整数型可以通过某些手段自动匹配出有几个参数但会牺牲效率 所以手动填写
共几组 = 3  ' 有几个参数就填几 如果组别多到15个以上了 那我建议重新设计业务逻辑
置入代码 ({ 139, 77, 252, 49, 210, 139, 116, 141, 4, 139, 54, 139, 70, 4, 57, 194, 127, 2, 137, 194, 73, 117, 238, 137, 85, 252 })
' MOV ECX,[EBP-4]
' XOR EDX,EDX
' 循环:
' MOV ESI,[EBP+ECX*4+4]
' MOV ESI,[ESI]
' MOV EAX,[ESI+4]
' CMP EDX,EAX
' JG 更大
' MOV EDX,EAX
' 更大:
' DEC ECX
' JNE 循环
' 完毕:
' MOV DWORD [EBP-4],EDX
返回 (共几组)  ' 变量复用 这里返回的是多个数组里面最大的一个成员数 顺便把返回权交给编译器 因为要适配不同的参数数量 这样写弹出多少字节就不用人去关心了



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


来自群组: 热心网友

评分

参与人数 1精币 +1 收起 理由
kyo9766 + 1 感谢分享,很给力!~

查看全部评分


签到天数: 4 天

发表于 2025-3-10 12:35:33 | 显示全部楼层   河北省张家口市
我试了试还真是呀恩师
问了ai给了个解释
在x86架构中,`LOOP`指令与`DEC ECX; JNE`组合的性能差异主要源于以下几个关键因素:

1. **微操作(μops)分解**:
   - `LOOP`指令在解码阶段会被分解为**2个微操作**(递减ECX + 条件跳转)。
   - `DEC ECX`和`JNE`虽然是两条指令,但在现代CPU(如Intel Skylake及之后)中会被解码为**1个微操作(DEC) + 1个微操作(JNE)**,总计2个μops。
   - 表面上看似等价,但`LOOP`的微操作融合和调度可能存在历史遗留优化问题。

2. **分支预测瓶颈**:
   - `LOOP`指令的跳转条件**依赖标志位**,而`DEC`指令会修改标志位。现代CPU的分支预测器对`JNE`这类显式分支的预测算法更成熟。
   - 在循环次数较大时,`LOOP`的分支预测失败率可能更高,导致流水线冲刷代价显著。

3. **前端解码吞吐量**:
   - `LOOP`指令在解码器中被归类为**复杂指令**(Complex Decoder),而`DEC/JNE`属于简单指令(Simple Decoder)。
   - 在AMD Zen或Intel Golden Cove等架构中,每个周期最多可解码4条简单指令,但复杂指令会占用更多解码带宽,导致前端吞吐量下降。

4. **执行端口竞争**:
   - `LOOP`的跳转操作需要占用分支单元(Port 6),而`DEC`可能使用ALU端口(Port 0/1)。分开的指令允许**端口级并行**。
   - 例如在Intel Haswell上,`JNE`使用Port6,`DEC`使用Port1/5,而`LOOP`必须串行使用这两个端口。

5. **部分标志位依赖**:
   - `LOOP`指令不修改除ECX外的任何标志位(仅依赖ECX),理论上应有优势。但实际上,某些CPU(如早期Pentium 4)对`LOOP`的ECX依赖链处理存在流水线停顿问题。
   - 现代CPU虽已优化,但在高频率循环中,`LOOP`的隐式标志更新仍可能引入微小的调度延迟。

**具体测试场景分析**:
假设循环体为空(纯测试循环开销),在Intel Core i7-11700K(Rocket Lake)上:
- `LOOP`指令每个迭代约需**1.5个周期**
- `DEC ECX; JNE`组合每个迭代约需**1个周期**

差异来自:
1. `LOOP`需要额外的1周期用于跳转地址计算(尽管现代CPU已优化)
2. 解码器对`LOOP`的微操作分配不够高效

**优化建议**:
- 在**热循环**中始终使用`DEC/JNE`代替`LOOP`
- 对ECX寄存器使用零扩展(避免高位残留导致部分寄存器停顿)
- 如果循环次数已知,可展开循环或使用`REP`前缀的字符串指令替代

**性能对比表(以Zen3为例)**:

| 指令序列        | 微操作数 | 解码器类型 | 端口占用     | 吞吐量(周期/迭代) |
|----------------|---------|------------|-------------|--------------------|
| LOOP S         | 2 μops  | 复杂解码    | Port1 + Port6 | 1.25               |
| DEC ECX; JNE S | 2 μops  | 简单解码    | Port1 + Port6 | 1.0                |

结论:`LOOP`指令在现代CPU上因微架构优化不足,其性能落后于显式指令组合。在追求极致性能的代码中应避免使用。
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2025-3-10 11:58:54 | 显示全部楼层   河北省张家口市
咋不把
' DEC ECX
' JNE 循环
换成loop呀恩师,这样不会快点吗?

点评

你试试 会更慢 通常 loop 能慢百分之30   贵州省毕节市  发表于 2025-3-10 12:02
回复 支持 反对

使用道具 举报

结帖率:25% (1/4)

签到天数: 1 天

发表于 2025-3-10 10:03:48 | 显示全部楼层   四川省巴中市
看到汇编我就觉得好高级,怎么学
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 3 天

发表于 2025-3-9 06:33:17 高大上手机用户 | 显示全部楼层   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 1 天

发表于 2025-3-8 22:55:55 | 显示全部楼层   广东省深圳市
学习一下
回复 支持 反对

使用道具 举报

发表于 2025-3-8 20:07:11 | 显示全部楼层   江苏省连云港市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2025-3-8 17:10:13 | 显示全部楼层   重庆市重庆市
感谢分享收藏了
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 1 天

发表于 2025-3-8 16:20:48 | 显示全部楼层   广东省江门市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 2025-3-8 15:30:46 | 显示全部楼层   湖南省常德市


6666666666666666666666666
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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