分享好友 最新动态首页 最新动态分类 切换频道
除法运算的汇编优化(用乘法和右移来代替)
2024-12-27 12:20

再来看一个例子,巩固一下。假设有以下3行反汇编代码,现在来反推回高级代码。

3行代码合起来即:(R0 * 0xCCCCCCCD) >> 34。

除法优化原理:a/b = (a*c) >> n,其中c=(2^n)/b。

由(R0 * 0xCCCCCCCD) >> 34,可知n=34,c=0xCCCCCCCD。根据c=(2^ n)/b,可知b=(2^ n)/c=(2^34)/0xCCCCCCCD=4.99999999971,即b=5(因为c值有一个很小的,不影响除法运算结果的误差,所以这里得到的值近似5)。所以,上述3行汇编代码对应的高级代码即:R0/5。与实际的源码正好对应的上:

再回头看一下刚开始提到的“R0 * 0xAAAAAAAB >> 32”,这个对应的高级代码应该是什么?

除法优化原理:a/b = (a*c) >> n,其中c=(2^n)/b。

由“(R0 * 0xAAAAAAAB) >> 32”,可知n=32,c=0xAAAAAAAB。根据c=(2^ n)/b,可知b=(2^ n)/c=(2^32)/0xAAAAAAAB=1.49999999983,即b=1.5。所以“(R0 * 0xAAAAAAAB) >> 32”即R0/1.5。不过,这里提到的除法优化是针对整数常量来说的,所以实际就是R0/(3/2),即R0*2/3。

现在把test函数简单修改一下:

原先参数类型是unsigned int,现在参数类型是int。看一下a/3对应的反汇编代码:

这4行代码合起来就是:(R0 * 0x55555556) >> 32 – (R0 >> 31),其中R0 >> 31是算数右移。先忽略后面的减法,只关心“(R0*0x55555556)>>32”。

除法优化原理:a/b = (a*c) >> n,其中c=(2^n)/b。

由“(R0 * 0x55555556) >> 32”,可知n=32,c=0x55555556。根据c=(2^ n)/b,可知b=(2^ n)/c=(2^32)/0x55555556=2.9999999986,即b=3。所以“(R0 * 0x55555556) >> 32”即R0/3。这么一看,貌似后面的“– (R0 >> 31)”是多余的。其实不然,简单分析一下。

参数类型是int,“R0 >> 31”就是取符号位(算数右移)。那么有两种情况:

1)R0是正数,那么R0 >> 31结果为0,减法相当于什么也没做。
除法优化原理还是:a/b = (a*c) >> n,其中c=(2^n)/b。

2)R0是负数,那么R0 >> 31结果为0xFFFFFFFF,即-1,减-1相当于加1。
除法优化原理变成:a/b =( (a*c) >> n) + 1,其中c=(2^n)/b。

为什么被除数为负数时,后面要加1呢?因为“(a*c) >> n”是向下取整的结果。加1是为了向0取整,而c/c++语言对于整数除法的规定正是向0取整。

最新文章
黄石百度爱采购托管代运营
解答:百度爱采购的优点有哪些?对中小企推广有什么优势?百度爱采购是百度集团旗下的 B2B 竖直搜索模块,致力于协助客户更切实解决企业发展趋势难点。服务平台靠着百度强劲的搜索技术性,服务项目大量客户,并运用AI技术性,结合要求案件
SDCMS红色系网络公司网站 v2.7.1.9
SDCMS红色系网络公司网站是基于SDCMS四合一企业网站管理系统开发的模板,适合企业站,带手机版。SDCMS四网合一企业网站管理系统是一个以PHP+MySQL/Sqlite进行开发的四网合一网站源码。四网合一企业网站管理系统支持在线升级(支持跨版本)
搞笑配音:恐龙大战怪兽之王,看完精彩又搞笑!
{{if !data.isVip && data.isActText}}{{else if !data.isVip && !data.isActText}}{{else}}{{if !data.isNormalVip}}{{if data.expiredVip && data.isActText}}{{else if data.expiredVip && !data.isActText}}{{else}}{{/if}}{{else if d
盘点一款微信小程序辅助器免费
您好:微信小程序辅助器免费这款游戏可以开挂的,确实是有卦的,咨询加V:X【95559344】微信小程序辅助器免费2025已更新(2025已更新)微信小程序辅助器免费工具全国可开地区:北京市(东城区、西城区、崇文区、宣武区、朝阳区、丰台区、石
百会在线文档,重塑办公文档管理的未来新篇章
百会在线文档是一款重塑办公文档管理的创新产品。它通过先进的技术和智能管理,为用户提供便捷、高效的文档处理体验。百会在线文档致力于优化办公流程,实现文档管理的智能化和高效化,助力企业和个人轻松应对日益增长的文档处理需求。百会
抖音付费推广有几种方式?有什么效果?
在抖音这个庞大的短视频平台上,付费推广成为了许多品牌和创作者快速提升曝光和影响力的有效手段。本文将详细介绍抖音付费推广的几种方式及其效果。一、抖音付费推广有几种方式?1.Dou+推广Dou+是抖音官方推出的付费推广工具,可以让视频获
招聘海外广告优化师
招海外广告投放(赤子城广州分)12-20K1、负责海外社交产品在Facebook/Google/Tiktok等及网盟等广告渠道的账户搭建,用户定位,数据监控及分析,优化广告数据,对广告效果负责2、制定海外社交产品项目整体的投放策略,负责素材方向及预算把控
哥普顿热水器快速售后24小时人工400-(问题解决) - 生活 - 百科知识-蓝心网
哥普顿热水器售后24小时维修服务热线:400-658-8618。哥普顿热水器全市各区售后服务点热线号码。☎:400-658-8618哥普顿热水器售后服务,秉承“诚信为本、客户至上”的服务态度和“以客户为中心”的服务指导思想,不仅真诚地为用户提供先进
爬虫大全:从零开始学习爬虫的基础知识,小白也能学
爬虫的实现原理其实很简单,就是模拟浏览器发送请求、获取响应、解析HTML代码、保存数据的过程。具体来说,可以分为以下几个步骤:我们在浏览器里输入网址访问网页时,其实就是在向服务器发送一条请求。在爬虫中&#
谷歌账号购买 谷歌邮箱批发 24小时自动发货
在当今数字化时代,谷歌账户(Google Account)已成为用户进入互联网世界的重要工具。无论是使用Gmail进行日常通信,还是通过YouTube获取丰富的娱乐内容,谷歌账户的影响力无处不在。对于希望在海外市场拓展业务或个人用户而言,购买谷歌账
相关文章
推荐文章
发表评论
0评