深入理解计算机系统 第三章大略和第五章大略

这2章总结的很少,主要是觉得没那么重要。

1.2个操作数的指令,第二个操作数通常是目的操作数:movb a b,move a to b,而add a b,b+=a,指令分为指令类,如mov类:movb,movw,movl,b指一个字节,w表示2个字节,l表示4个字节
                                                      movs类(扩展填符号),movz类(扩展填0)
  寄存器:这里只说ia32体系的那8个32位寄存器,存数值和指针,都以%e开头,特殊地,最后两个:%esp是栈指针,%ebp是帧指针
  指令可以独立地读取或写入前4个寄存器的2个低位字节,如movw %ax,%cx,或movb %al,%cl
  所以一般说8个四字节寄存器(%eax),8个双字节寄存器(%ax),8个单字节寄存器(%al),但硬件上只有8个四字节寄存器,后2者是前者的部分
  操作数分3类:立即数,即常数值(格式:$0xF);寄存器,表示某个寄存器存的内容(%eax,%ax,%al等);
  存储器引用,(格式:4(e1,e2,s)表示操作数的地址是:4+寄存器e1存的内容+寄存器e2存的内容*s:
  %eax;$0x11;0x01;(%eax);4(%eax);(%eax,%ecx,3),前2个对应寄存器操作数和立即数操作数,后面的都是存储器引用操作数
2.%esp存的是栈顶指针的值,该值作为地址指向的值是栈顶元素的值,栈顶指针入栈变小,出栈变大;subl $4,%esp表示入栈4个字节,地址+-1表示移动一个字节
  (%esp)表示栈顶的地址:movl $0xff,(%esp)表示把0xff覆盖栈顶的四个字节,(%esp)表示%esp所存值作为的地址
3.leal其实是movl的变形:leal s,d:把s加载到d,s就是一个地址(movl是取s所在地址的值),不是没有存储器引用,d必须是寄存器。

4.控制,主要讲了条件跳转指令jmp类和条件传送指令cmov类,忽略,本来以为能看到luajit的一些跳转知识,结果没有。大量if-else不如switch,不过这没什么实际用吧。

  (关于条件传送那里我只是略略看,回头认真看一波)

5.第5章:这章备受推崇,但是,我读完了认为几乎没什么收获,说明标题党还是有存在的理由:优化程序的性能
这里主要提了把循环里面一些东西挪到外面,比如for(int i = 0;i < strlen(s);++i),先算strlen,
消除不必要的存储器引用,引入临时变量保存中间结果
循环解开,这个编译器优化做了

时间: 2024-10-13 04:52:56

深入理解计算机系统 第三章大略和第五章大略的相关文章

深入理解计算机系统(第三版) csapp 第六章部分答案

6.23 平均旋转时间: T avg rotation = 1/2*T max rotation = 1/2*(60s/15000RPM)*1000ms/s≈2ms 平均传送时间: T avg transfer = 1/RPM * (1/(平均扇区数/磁道))*60s/1min = 1/15000RPM * (1/800)*1000ms/s≈0.00008ms 总的预计访问时间: T access = Tave seek + T avg rotation + T avg transfer  ≈

深入理解计算机系统【三】

机器级表示.今天断断续续看了2小时,粗读了这章一半的内容. 计算机底层是01:但可读性不好,所以有了汇编语言.但汇编语言可读性也很差,所以又有了编译器,形成了各种贴近人类语言的Java.C之类的. 还一直以为自己干的是把人语言翻译成计算机呢,原来也是个中间层. 为什么要理解汇编?我想到了平常工作时的需求理解.现场的需求先和现场实施说,实施再找我们这边的设计,最后才到我们开发这里.这样子的需求往往就失真了许多.做出来的效果往往就不是很好,我一般都会采用开发完后多次发现场验证的方式来解决. 汇编在计

大小端字节序的来历(摘自《深入理解计算机系统 第三版》)

术语“little endian(小端)”和“big endian(大端)”出自Jonathan Swift的<格列佛游记>(Gulliver's Trabels)一书,其中交战的两个派别无法就应该从哪一端(小端还是大端)打开一个半熟的鸡蛋打成一致.就像鸡蛋的问题一样,选择何种字节顺序没有技术上的理由,因此争论沦为关于社会政治论题的争论. 一下是Jonathan Swift在1726年关于大小端之争历史的描述: “......下面要告诉你的是,Lilliput和Blefuscu这两大强国在过去

Head First Python 第二章 函数模块&amp;第三章 文件与异常&amp;第四章 持久存储&amp;第五章 处理数据

第三章 1.共享模块 模块和发布工具箱全世界共享模块 编写函数,以.py为文件后缀名,第三方库都在PyPI *注释代码:三引号(单双都可以) 发布过程P40 使用发布工具,函数模块变成了一个“发布”,可以使用import导入其他程序 2.如果函数模块功能不满意 添加参数以供api选择比添加函数工作量小! 首先考虑BIF内置函数 ----------------------------------------------------------- 第四章 1.文件 open()语句,readlin

sql 语句系列(众数中位数与百分比)[八百章之第十五章]

众数 众数就是出现最多的那个数. select sal,count(*) as cnt from emp where DEPTNO=20 group by sal 通过分组把他们的行数计算出来.那么最关键的部分在于,你如何知道最大值. 是的我们可以查出当前最大值,然后再取出最大值的sal.但是这肯定要用到两个临时视图. 注:我们不能通过排序cnt,然后取值第一个,因为可能存在相同的行数. 解决方案:通过dense_rank 进行排序. 科普一下概念: row_number的用途非常广泛,排序最好

软件需求分析教程:第四章详读第五章软件风险管理基础

在我们改进需求过程是要注意把理论方法付诸于实践活动是改进软件过程的核心所在,我们改进软件开发过程的两个主要目标一是解决在以前项目中或目前项目中遇到的问题,另一个是防止和避免你可能在将来的项目中遇到的问题.在软件开发过程中一定要掌握一些其他的很有价值也颇有效的需求工程方法以防止软件组织面临一些突发情况是力不从心. 需求过程是软件项目成功的关键所在,当其他项目过程变更时会对需求过程的影响下面列举了一些变更会产生影响的项目过程:制定项目计划过程(在基线确定前缩小项目范围或采用版本计划从而使项目计划在允

第四章 流程控制语句及第五章 用户及文件权限

for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理,当要处理的数据有范围时,使用for循环语句.while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数.case语句是在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试:而如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令.计划任务分为一次性计划任务与长期性计划任务.文件的所有者user.所属组group以及其他人other文件的读(r)-4

对找工作功不可没——评《深入理解计算机系统》

对找工作功不可没——评<深入理解计算机系统> 引子: 在我刚刚进入中科院计算所读研的时候,同宿舍的师兄便向我推荐了一本<深入理解计算机系统>,这本书从一个程序员的视角详细剖析了整个计算机系统,涵盖了组成原理.汇编语言.体系结构.操作系统.网络等计算机基础知识. 由于时间所限,我并没有立刻阅读,而是将其列入了找工作前的复习书单.2010年8月,我用了一个月的时间读完了这本书的原版<Computer System:A programmer's perspective>.后来

《Spring实战》学习笔记-第五章:构建Spring web应用

之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. 本章中,将会接触到Spring MVC基础,以及如何编写控制器来处理web请求,如何通明地绑定请求参数到业务对象上,同时还可以提供数据校验和错误处理的功能. Spring MVC初探 跟踪Spring MVC请求 在请求离开浏览器时,会带有用户所请求内容的信息,例如请求的URL.用户提交的表单信息. 请求旅