11-07除法

代码分析:分段,以块为单位看代码,逐个击破

流水线优化:在不影响结果的前提下,排列指令顺序,提高并行程度


除法

变化一

     如果除数是变量,只能使用除法指令,有符号是idiv,无符号是div

这是经过数学论证的,当除数位置是没有优化的余地的

变化二

     除数不是变量,且除数是2的幂

1.在无符号的情况下,采取向下取整的除法,,一般直接使用右移指令


图片.png

2.有符号的情况下,需要经过数学推导:

IMG_2861.JPG

数学除法会产生小数,C语言计算产生的误差只要在0- |1/b| 之间的范围,可以利用这个推导来忽略误差

IMG_2862.JPG

由以上推导,处理有符号数的时候,例如

图片.png

编译器的优化过程以推导7作为基础

IMG_2863.JPG

可是,如何将 n > 0 和 n < 0 这两个分支优化,编译器采取的思路是利用cdq配合and指令

cdq                         ;符号拓展,将eax的符号拓展到edx,edx要么位0xffffffff要么为0
and         edx,7           ;利用与运算,若n > 0 ,edx = 0,   n < 0, edx = 7
add         eax,edx
sar         eax,3

定式:

cdq
and edx, immA
add eax, edx
sar eax, immB

验证:

(2^immB) -1 = immA
若不相等,则可能是作者内联汇编挖的坑,因为c语言语法是不会产生cdq指令的

还原:

eax / (2^immB)

     除数不是变量,且除数不是2的幂

Debug:不做有优化
Release:

推导:

IMG_2864.JPG

m = 2^n / c
n由编译器决定,一般16位环境从16开始,32位环境从32开始,以此类推。
所以2^n为常量
c为常量
n的取值由c决定,需要满足误差小于1/c
所以m为常量,又称为MagicNumber,这个值由编译器编译时产生

又因为 a*m = edx. eax
有可能直接使用edx,那么这就是结果 >>32 位
所以最后的结果需要以edx做移位,
所以edx的移位位数需要加上32

定式

mov eax, MagicNumber
imul ....
sar edx, ...
mov reg, edx
shr reg, 1fh
add edx, reg

还原

o = 2^n / c
n从右移的次数得到,MagicNumber作为c,代入公式求解到除数近似值,还原除法原型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 36,305评论 8 113
  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 2,335评论 0 1
  • 有哪些值得借鉴的行走社会的经验? 1、能用钱解决的事情,千万不要用人情。 2、好听的话别当真,难听的话别走心。 3...
    zhangBennett阅读 243评论 0 0
  • 心心念念一年的人也可以说放下就放下。 知道一切都回不去了,所以我也不再报希望。或许从来就不曾有过希望。zz yl对...
    木刻茉莉阅读 95评论 0 0
  • 上上周,因为某种机缘巧合,我去了趟养老院。 没去之前,养老院在我心里是长这样的: 不长上面那样也应该长这样: 结果...
    鬼才肉兔几阅读 2,375评论 33 62