CSAPP第四章

目录

前言

一、基础知识

二、Y86-64顺序实现

二、关于if-else会降低程序效率问题

总结



前言

目前读CSAPP(深入理解计算机系统)有一个月了,看了大概五章内容了,但是一直没时间来写写总结(主要还是懒),想从今天开始写写系列文章,总结一下每一章的内容。

事先声明,我写的总结可能不是特别全面,可能就是从程序员的角度来书写一下这本书比较有用的地方,还是菜鸟阶段,可能有诸多漏洞,还请多多指正。


首先是第四章的,第四章讲了处理器体系结构,比较偏硬件方面,但是可以帮助我们理解一下更加底层的内容。

一、基础知识

        第四章是在讲机器指令执行过程,并且附带了大概硬件是怎么实现的,我们首先要了解什么是机器指令,我们程序员平时写的c语言可以称为高级语言,高级语言可以汇编成汇编语言,就是比如mov指令、add指令和push指令等这些组成的汇编语言,然而计算机其实只会认识0和1这两个数字,所以就需要再利用编译器编译成机器级别指令,就是利用数字来代表每个指令(有点类似于ASCALL码中利用数字代表字母的意思)。

        第四章指明了哪些是程序员可见状态,包含:寄存器、条件码、程序状态、pc、内存。

二、Y86-64顺序实现

  这里主要讲述了一条机器指令的执行过程,包含取指、译码、执行、访存、写回、更新pc操作。

1.取指

        取指,顾名思义,就是获取指令,就是从pc所指向的内存地址取出指令。pc是指程序计数器寄存器,专门用来存储当前执行指令的地址。

2.译码

        译码阶段是从指令中所指向的寄存器中读入最多的两个操作数valA  or  valB(其实就是访问寄存器,拿出操作数)。

3.执行

        执行阶段ALU(算术逻辑单元)根据我们输入的valA和valB,并且根据相应的指令执行相应的运算。

4.访存

        假如该条指令设计到了内存的操作,这个阶段就是写回或者读取内存。

5.写回

        更新相应的寄存器的值,和译码阶段是相反的两个操作。

6.更新pc

        根据这次指令长短,更新pc,计算下一条指令的地址是多少。

二、关于if-else会降低程序效率问题

        顺序执行难免会效率太低,所以现在处理器一般都是流水线作业,其中在执行if-else语句时时进行分支预测,就是会实现把if或者else中的指令读取进来,并且有可能会进行往下进行译码和执行,这就会导致一个问题,就是假如分支预测错误,这些工作都白做了,而且处理此时要等待另外一个分支指令加载进来,所以就会白白浪费很多指令周期,会导致程序性能下降,所以我们平时要少写if-else语句,争取用其他方式代替。


总结

感觉自己对硬件或者汇编这块理解不是很深,所以写的比较渐显,供自己之后复习使用。

你可能感兴趣的:(CSAPP笔记,架构,windows,linux)