之前的笔记搬运
0x1 加法与减法
加法与减法在一般编译后的指令都是add和sub指令, 只有语句使用常量时,涉及到优化后可能会把一些语句在编译时提前做好计算取代了之前的代码,一般分为常量传播, 常量折叠, 删除无用变量
常量传播:
1 | 在编译优化时,将能够计算出结果的变量直接替换为常量。 |
常量折叠:
1 | 在编译优化时,多个变量进行计算时,而且能够直接计算出结果,那么变量将由常量直接替换。 |
0x2 乘法
乘法在一般编译后的指令都是(i)mul指令, 但是有常量运算的话,还是会有优化的手法来减少指令周期,一般都是由位操作指令和lea与比例因子运算配合来实现等价mul的指令
1 | i = i * 4; 会被优化为 shl reg, 2 |
0x3 除法
除法在一般编译后的指令都是(i)div指令
非2的幂无符号除数:
1 | i = i/9; |
非2的幂有符号除数:
1 | i = i / 9; |
2的幂有符号除数:
1 | i = i / 2; |
2的幂无符号除数:
1 | i = i / 2; |