字符串与数组处理全解析
1. 引言
高效处理字符串和数组是代码优化的关键领域。研究表明,大多数程序90%的运行时间都花在执行10%的代码上,而这10%的代码常常出现在处理字符串和数组的循环中。本文将介绍字符串和数组处理的技术,目标是编写高效代码。
2. 字符串基本指令
x86指令集有五组用于处理字节、字和双字数组的指令,虽然被称为字符串基本指令,但不限于字符数组。每个指令隐式使用ESI、EDI或两者来寻址内存,累加器根据指令数据大小使用AL、AX或EAX。这些指令执行效率高,因为它们能自动重复和递增数组索引。
在保护模式程序中,ESI自动是DS段的偏移量,EDI自动是ES段的偏移量,且DS和ES总是设置为相同值,无法更改。而在实地址模式下,ES和DS常由ASM程序员操作。
2.1 使用重复前缀
单独的字符串基本指令仅处理单个内存值或一对值。添加重复前缀后,指令会重复执行,使用ECX作为计数器,允许用单条指令处理整个数组。
| 指令 | 描述 |
|---|---|
| MOVSB, MOVSW, MOVSD | 移动字符串数据:将ESI指向的内存数据复制到EDI指向的内存 |
| CMPSB, CMPSW, CMPSD | 比较字符串:比较ESI和EDI指向的两个内存位置的内容 |
| SCASB, SCA |
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



