32、字符串与数组处理全解析

字符串与数组处理全解析

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值