分享好友 最新动态首页 最新动态分类 切换频道
除法运算的汇编优化(用乘法和右移来代替)
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取整。

最新文章
科技智能重塑外汇体验,最新动态与未来展望
摘要:外汇市场最新动态显示,科技引领未来发展趋势,智能产品正在重塑外汇交易体验。随着科技的不断进步,外汇交易逐渐实现智能化,提供更加便捷、高效的交易方式。智能产品的应用,使得外汇交易更加智能化、个性化,满足不同交易者的需求
ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法,先分组,然后在组内排名,分组计算,主表与附表一对多取唯一等
今天在使用多字段去重时,由于某些字段有多种可能性,只需根据部分字段进行去重,在网上看到了rownumber() over(partition by col1 order by col2)去重的方法,很不错,在此记录分享下:  row_number() OVER ( PARTITION BY COL1 ORDER B
讲座回顾 | 探秘以“假”乱真的AIGC图像与视频生成
图|广外国际学院随着人工智能深入高等教育,海内外优质高等教育资源也在积极响应科技发展的步伐,愈发重视人工智能在现代商业中的关键作用。本次AI系列讲座是广外国际学院响应高等教育高质量发展的一次全新举措,从AI的起源和发展史,到AI
《重返80年代之我靠抓螃蟹发家》短剧在线观看,致姗姗来迟的你(电视剧版)——时光深处的温暖相遇(集萃)短剧在线观看,致姗姗来迟的你百科短剧在线观看
《重返80年代之我靠抓螃蟹发家》是一部在线观看的短剧,讲述了一段关于时光深处的温暖相遇的故事。这部短剧展现了主人公通过抓螃蟹发家致富的历程,同时也展现了姗姗来迟的温暖相遇。观众可以在线观看这部短剧,感受其中的情感与温馨。久别
抖音申请药品类目的方法,开通具体步骤
如果您想在douyin平台上开设药品类目店铺,您需要遵循一系列严格而详细的步骤,以确保您的店铺合法、合规并成功运营。以下是一份详尽的申请和开通指南,帮助您顺利踏入douyin药品电商的蓝海。一、准备必要的资质文件首先,确保您已准备好所
用AI绘画生成超逼真美女写真,你绝不能错过的全新神器!
DALL·E 2:由OpenAI开发的这个工具使用更为复杂的神经网络,能根据文字描述生成惊人的真实图像。你只需输入“优雅的美女在樱花树下微笑”,就能获得相应的高质感画面。其不足之处在于,需要较好的描述能力,才能生成理想的图像。Midjourne
拼多多店铺标题能和别人一样吗?如何优化标题?
最近有很多商家朋友都问过我同一个问题:老师啊,我产品现在能改标题不?改了又降权,不改流量到瓶颈了,不知道如何提升!今天我就出一期关于拼多多商品在什么情况下去改标题怎么去改最好详细讲解一下。相信大家都知道,你的商品卖的好不好
私信卡片工具一键跳转微信加好友如何实现?
您是否常常遭遇这样的困扰:想要引导平台粉丝或潜在客户快速添加微信好友,却面临重重阻碍?繁琐的手动操作、复杂的引导流程,让许多宝贵的人脉资源和商业机会从指尖溜走。别担心,私信卡片工具一键跳转微信加好友功能的出现,将为您彻底扭
Sora开始收费了,其他人怎么办?
《中国经营报》记者注意到,Sora最早于今年2月公开亮相,一度惊艳世界,但试用者局限于艺术家、动画师、电影制作人等专业人士。在此次OpenAI宣布开放之后,Sora官网注册人数激增导致页面无法正常使用。Sora产品负责人Rohan Sahai对此回应称
视频压缩在线工具,推荐6个实用工具
有时候视频文件体积太大不仅会占用设备的存储空间,降低设备的运行效率,在网络状况不佳的情况下,还会导致视频播放卡顿,十分影响用户的视频观看体验。对于这种情况,很多用户会选择压缩视频大小。那么有哪些比较好用的视频压缩在线工具或
相关文章
推荐文章
发表评论
0评