汇编语言基于x86处理器课后答案|x86汇编语言教程

更新时间:2019-10-18 来源:应用教程 点击:

【www.hzclsc.cn--应用教程】

5.0 编译优化概述

优化是一件非常重要的事情。作为一个程序设计者,你肯定希望自己的程序既小又快。DOS时代的许多书中都提到, 某某编译器能够生成非常紧凑的代码 ,换言之,编译器会为你把代码尽可能地缩减,如果你能够正确地使用它提供的功能的话。目前,Intel x86体系上流行的C/C++编译器,包括Intel C/C++ Compiler, GNU C/C++ Compiler,以及最新的Microsoft和Borland编译器,都能够提供非常紧凑的代码。正确地使用这些编译器,则可以得到性能足够好的代码。

但是,机器目前还不能像人那样做富于创造性的事情。因而,有些时候我们可能会不得不手工来做一些事情。

使用汇编语言优化代码是一件困难,而且技巧性很强的工作。很多编译器能够生成为处理器进行过特殊优化处理的代码,一旦进行修改,这些特殊优化可能就会被破坏而失效。因此,在你决定使用自己的汇编代码之前,一定要测试一下,到底是编译器生成的那段代码更好,还是你的更好。

本章中将讨论一些编译器在某些时候会做的事情(从某种意义上说,本章内容更像是计算机专业的基础课中《编译程序设计原理》、《计算机组成原理》、《计算机体系结构》课程中的相关内容)。本章的 许多内容和汇编语言程序设计本身关系并不是很紧密,它们多数是在为使用汇编语言进行优化做准备。编译器确实做这些优化,但它并不总是这么做;此外,就编译器的设计本质来说,它确实没有义务这么做 编译器做的是等义变换,而不是等效变换。考虑下面的代码:


这两个修改版本都不同于原先程序的语义。首先我们看到,让i从0开始是没有必要的,因为j+=i时,i=0不会做任何有用的事情;然后是,实际上没有必要每一次都计算1+...+100的和 它可以被预先计算,并在需要的时候返回。

这个例子也许并不恰当(估计没人会写出最初版本那样的代码),但这种实践在程序设计中确实可能出现。我们把改进2称为编译时表达式预先计算,而把改进1成为循环强度削减。

然而,一些新的编译器的确会进行这两种优化。不过别慌,看看下面的代码:


程序采用的是一个时间复杂度为O(n)的算法,不过,我们可以把他轻易地改为O(1)的算法:

本文来源:http://www.hzclsc.cn/anzhuo/34175.html

为您推荐

支付宝怎么自动还信用卡还款_支付宝怎么自动还信用卡 支付宝设置信用卡自动还款教程

支付宝可以对信用卡还款进行管理,有些办了信用卡的童鞋,还不知道支付宝怎么自动还信用卡,通过设置我们可以实现支付宝信用卡自动还款,省时省力,下面带来设置详细教程。支付宝怎么自动还信用卡? 进入支付宝,点教你一招

2020-12-14 07:03:59   支付宝可以自动还信用卡吗   支付宝如何自动还款信用卡   支付宝怎么自动还款信用卡  

【炼金与魔法按键怎么用】炼金与魔法按键怎么操作 炼金与魔法按键操作方法介绍

炼金与魔法是一款国产沙盒游戏,游戏的操作并不难,但是游戏中没有独立的按键使用教程,很多玩家不清楚如何操作,下面为大家带来炼金与魔法按键操作方法介绍。炼金与魔法按键操作方法介绍独立游戏

2020-12-13 23:04:59  

【王冠之心怎么样】王冠之心怎么联机 王冠之心联机教程

王冠之心(Heart of Crown PC)是一款卡牌策略类型的游戏,那么玩家该怎么联机进行游戏呢?下面就来分享一下王冠之心联机教程。王冠之心联机教程准备工作,把skip open port che策略与战棋

2020-12-13 07:06:08   王冠怎么折   手工王冠怎么做   银色王冠怎么用  

网易白金卡潮玩版|网易白金卡是什么 网易白金卡怎么激活

网易白金卡是什么?网易与中国联通联合推出了手机号码品牌网易白金卡,让用户可以免流量使用网易全系应用。现在炉石传说已经加入白金卡免流套餐!下面就一起来看看网易白金卡怎么激活吧。什么是网易白金卡网易白金卡游戏资讯

2020-12-12 11:04:25   网易白金卡免流范围   网易白金卡官网  

中国快递|中国快充标准详细介绍 中国手机快充技术介绍一览

手机快充技术发展已经有几年了,各家厂商的技术也不一样,在泰尔论坛2017快充技术标准与应用研讨会上,带来了中国首部快充标准《通信终端快速充电技术要求和测试方法》,下面一起来看下中国快充标准详细介绍!2知识加油站

2020-12-12 11:04:25   中国快递协会   中国快递公司排行榜   中国快餐连锁50强品牌