字符串与数组处理技术详解
在编程中,高效地处理字符串和数组是实现代码优化的关键。大部分程序会将 90% 的运行时间花在执行 10% 的代码上,而这 10% 的代码常常出现在处理字符串和数组的循环中。本文将深入探讨字符串和数组处理的相关技术,旨在帮助大家编写更高效的代码。
1. 字符串基本指令
x86 指令集包含五组用于处理字节、字和双字数组的指令,尽管它们被称为字符串基本指令,但并不局限于字符数组。这些指令在处理数据时,会隐式地使用 ESI、EDI 或两者来寻址内存,根据指令的数据大小,累加器可能使用 AL、AX 或 EAX。字符串基本指令能高效执行,因为它们会自动重复并递增数组索引。
在保护模式程序中,ESI 自动作为 DS 段的偏移量,EDI 自动作为 ES 段的偏移量,且 DS 和 ES 总是设置为相同的值,无法更改。而在实地址模式下,ES 和 DS 常由 ASM 程序员进行操作。
1.1 使用重复前缀
单个字符串基本指令只能处理单个内存值或一对值。若添加重复前缀,指令会以 ECX 作为计数器进行重复执行,这样就可以使用一条指令处理整个数组。
| 指令 | 描述 |
|---|---|
| MOVSB, MOVSW, MOVSD | 移动字符串数据:将 ESI 指向的内存数据复制到 EDI 指向的内存 |
| CMPSB, CMPSW, CMPSD | 比较字符串:比较 E |
超级会员免费看
订阅专栏 解锁全文
17万+

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



