当前位置: 首页 > news >正文

p2p网站建设方案策划书2022世界足球排行榜

p2p网站建设方案策划书,2022世界足球排行榜,wordpress metavalue,淮南装饰公司网站建设1. 若干年前的疑问 几年前还在大学学习汇编时,不管是考试还是课程设计,其实都很顺利。但是心里一直对什么时候使用哪个寄存器存在疑惑,编写汇编时,没有十足的把握,都是抱着试一试的心态去完成了课程任务。 工作八年有…

1. 若干年前的疑问

几年前还在大学学习汇编时,不管是考试还是课程设计,其实都很顺利。但是心里一直对什么时候使用哪个寄存器存在疑惑,编写汇编时,没有十足的把握,都是抱着试一试的心态去完成了课程任务。

工作八年有余,已走在向linux内核进发的路上。在学习linux内核之前,心里存有一些侥幸,认为汇编可以跳过去。别人封装好,只管使用即可,反正自己又不一定写。在学习过程中,涉及到汇编的部分都是大致看一下设计思路。但是逐渐地,跳过的细节越来越多,导致书慢慢的越来越看不懂了。问题积少成多,窟窿越来越大,量变产生了质变。

汇编中的指令还是挺好理解的,就是一些功能函数,我相信大多数人理解起来问题都不大。

我认为汇编中最大的问题在于寄存器和内存的使用。CPU中寄存器的数量有限,引发了两个问题:

  1. 何时该用哪个寄存器
  2. 哪些数据存在寄存器哪些放在内存

这两个问题一直困扰着我,由于工作中用汇编比较少,所以这个问题一直没有得到深入地思考和解决。今天我们就尝试解决这两个汇编问题。

2. 汇编指令与高级语言中函数的相同点和不同点

我们直入主题,汇编指令与高级语言中函数的相同点是:

  • 汇编指令和函数一样,都是为了完成某个操作的功能单元,他们都有输入和输出,说白了,你可以把汇编指令也看成是一种函数。

不同点是:

  • 单个汇编指令不能嵌套调用,可以组合调用;成对搭配的汇编指令,可以嵌套调用,比如CALL和RET。
  • 单个函数可以嵌套调用,也可以组合调用

3. 单个指令的“独占性原理”

寄存器的个数是很有限的,但是指令确有很多很多,寄存器够用吗?

答案是,对单个指令来说,肯定是够用的。因为单个指令不能嵌套,所以我们可以确定,一个指令在被CPU核执行的时候,是“独占”所有它可以操作的寄存器的,因为此刻一个CPU核中不会有其他指令执行。这样一来,我们可以确定,对一条指令来说,寄存器虽然很少,但肯定是足够的。CPU厂家在设计指令时,不会设计使用超额寄存器数量的指令。

单条指令的“独占性原理”,保证了CPU中即使只有有限数量的寄存器,也能正确执行任何单个指令。

4. 多指令协同与优化

从单个指令执行过程看,单个指令执行有“独占性原理”。

从多个指令执行过程看,寄存器还能够用吗?设想一下,如果前一个指令执行后,有很多重要的数据存在于寄存器中保存,而当前的指令又需要独占寄存器,很有可能会把存在于寄存器中重要的数据给“覆盖”、“破坏”了,从而导致重要数据丢失。这种情形下,程序将无法正确执行。出现这种问题的根本原因还是在于寄存器数量有限,如果寄存器数量很多很多,那么只要合理分配和释放,数据就不会被覆盖。

所以,在多指令角度,因为寄存器数量有限,又出现了新的问题。怎么解决这个问题呢?

通过将下一条指令需要的数据留在寄存器中,将下一条指令不需要的数据放到内存中,这个问题迎刃而解。下一条指令需要的数据,其实就是指令的输入参数。前后指令配合的过程,我起个名字,叫“多指令协同”。

其实把下一条指令的输入参数留下,不需要的数据放入内存,是一种简单粗暴的做法。细想之下,如果寄存器数量还有空余,其实可以多留一些数据在寄存器中,给下下条指令,下n条指令传参,这样可以减少内存的访问,提高执行效率。但是这种预留是不确定的,是动态的,是具体的,必须根据具体的指令,使用的参数个数,返回值个数,进行专门优化。这个过程,我称之为“多指令协同优化”。

在编译高级语言的过程中,编译器会在生成汇编语言时,根据编译参数,自动进行优化。在编译程序时,不同的编译优化等级,优化的算法和力度是不同的。如果考虑上CPU的多级缓存,其实优化过程还是很复杂的。这里我们暂时不做深入研究。

5. 汇编编程套路

工作做到最后,都是套路。套路换一个词,就是经验。如何能够把汇编程序写得又快又好,那就需要学习套路。

我们上面说了,当写多条指令的时候需要注意优化寄存器和内存的使用。这个优化太自由了,你可以这么优化,我可以那么优化,自由的东西一定程度上,是没有标准没有把握的东西。我们平时写代码,如何更多的关注于业务呢?这里讲一种方法。

程序都是由一小块一小块功能模块的代码组成的,汇编也是一样。汇编程序是由很多汇编代码段组成的。这里用代码段来讲,而不是用函数来讲,是因为函数也有可能是由几个代码段组成。所以代码段是比函数更小的代码模块。

有了代码段的概念之后,我们可以把“指令独占性原理”,扩展到代码段,变成“汇编代码段独占性原理”。我们可以认为一个代码段执行过程中,独占所有寄存器,代码段执行完成后,可以通过某几个寄存器向接下来的代码段传递参数,剩下的寄存器,默认将成为空闲寄存器,里面的数据可以被覆盖。如果有的寄存器需要延长生命期,可以把寄存器中的数据保存到内存中,从而将寄存器释放出来。

这样,下一个代码段也将独占所有寄存器。这样就不用时刻担心,这个寄存器能不能用,会不会覆盖已有的数据了。

本质上,这是通过控制作用域与生命期,来调整软件架构的方法,这个方法在编程中很常用。

6. 结论

通过一步步推导“单指令独占性”原理,“多指令协同”,“多指令协同优化”,“汇编编程套路-代码段独占性原理”,可以很好的解答本文开始提出来的疑问。寄存器,内存的使用是有章可循的,大致的原则和方法要心中有数,才能算是对汇编有一定的掌握,编写或者阅读代码时,才能更有信心。

我的学习习惯就是这样,基本的思路逻辑必须先梳理清晰,而不是一头扎进细节里。重要的细节,我在后面的文章中会进行专门探讨。

http://www.hkea.cn/news/335922/

相关文章:

  • 做网站的艰辛免费个人网站申请
  • 网站改版需要多久网站设计与制作毕业论文范文
  • 深圳横岗网站建设网站建设的推广渠道
  • 有没有什么网站免费做名片2023年新闻小学生摘抄
  • 新网金商网站外链查询工具
  • 网站建设的进度竞价托管选择微竞价
  • 网站快速网站推广怎么做一个公司网站
  • 旅游网站模板htmlseo品牌优化整站优化
  • 方圆网站建设aso优化重要吗
  • 做购实惠网站的意义好用的搜索引擎有哪些
  • 怎么把自己笔记本做服务器做个网站搭建网站基本步骤
  • jeecms做企业网站成都网站建设公司排名
  • 沈阳招聘网站开发地推项目平台
  • 798艺术区成都seo达人
  • 平度网站建设抖音代运营收费详细价格
  • 株洲网站优化找哪家seo优化的价格
  • 找印度人做网站sem竞价推广公司
  • 山西网站推广公司网站关键词优化怎么弄
  • 微信分销是什么重庆优化seo
  • 武汉企业网站推广方案永久免费无代码开发平台网站
  • 网站开发岗位群怎样推广产品
  • 桐城市美丽乡村建设专题网站石家庄整站优化技术
  • 北京建网站的公司哪个比较好郑州seo价格
  • 进空间的网站网络营销常见的工具
  • wordpress发文章的id怎么不连续如何做好搜索引擎优化工作
  • 交互式网站如何做seo推广软件排名
  • 西部建设网站惠州seo排名优化
  • 做环球资源网站有没有效果2024百度下载
  • 织梦 安装网站网站搭建需要多少钱
  • 做网站购买备案域名性价比高seo的排名优化