懒癌发作,本来计划是两到三天就一个unit的,没想到一直拖到今天才完成第二部分(6-8章)。

第6章,介绍了hack汇编到二进制,也就是用翻译到01来表示。从课后习题来看,这一章目的就是设计一个程序(汇编编译器),按汇编规范(规则)来将asm文件转换成hack文件。从实现来讲,就是逐句翻译成对应的代码就行了,难度并不大。重点是要理解翻译完之后,背后的硬件是如何执行的。首先明白这一部分的硬件构成,有ALU运算单元,A、D高速寄存器,RAM内存,ROM指令内存。在明白hack命令的16位数字每一位分别代表的意义之后,就可以直接进行转换程序的设计了。这个语言是一种很底层的语言,语法特点是先定位到特定的地址,然后再对地址的内容进行操作。

第7章,介绍了VM虚拟机。首先解释了,我们都知道,无论我们运用哪种语言就行编程,最终都会转换成一系列的0和1,但是并不是说高级语言一下子就能转成0和1,因为每个硬件结构都不太如一,也就是硬件的API不尽相同,而高级语言的API也不尽相同,现在引入一个新的概念,虚拟机,也就是VM层,这一层的好处就是,极大地提高了通用性(?,不知道怎么形容会更好,书中是这样说的:高级语言编写的程序一旦被编译成VM代码,那么就可以在任何配备了对应VM实现机制的硬件平台上运行)。

个人理解就是,vm层是介于高级语言(就是我们日常接触的编程语言)和底层语言(汇编语言)中间的部分。

当然这章还引入了一个非常重要的概念,就是堆栈(LIFO,后进先出),堆栈这个模型真是美妙得不知道怎么形容。书中表达了一个观点:任何算术表达式和布尔表达式(不管多复杂)都能被系统化地转成一系列在堆栈上的简单操作,并系统化地计算出来(这句话表达了个很厉害的观点,我个人理解就是体现了计算机中一个很重要的概念:抽象,无论是任何式子,都能够被分解成简单的小部分。)

这章的课后习题就是先构造VM编译器的一部分,实现其中的算术运算,访问内存等功能。具体实现也就是逐句翻译,当然要理解堆栈中,指针的变化,如何将A、D寄存器作为中间存储器来实现对M(内存)内容的修改。

第8章,完善VM编译器。因为高级语言必定不可能是按直线顺序由头执行到尾的,其中一定会有跳转,换句话说就是突然从这里跳到那里,然后又回到这里,那么有一个必须需要做的工作就是,保存现场,这个时候又体现了堆栈这个模型的美妙之处,在调用子程序的时候,先将现场的各个参数(指针)压到栈里,然后等于重新在一个空的栈来执行子程序,子程序执行完之后,保存好返回的数值,又按之前存好的指针,回到之前的现场。

这个堆栈个人理解就是一个单进程(线程)的模型,同一时间,只处理栈顶部分的数据,调用子程序的时候,就是先保存现场,然后在栈顶压入子程序,处理完又回到主程序,这个设计真是很美妙啊。最终栈中为空,就意味处理完所有东西了。

这一章的课后习题其实也等于是逐句翻译,但是翻译到最后两个题时,就出错了,暂时发现自己思维已经陷进去了,除了重构找不到解决办法,但是又不想重构,所以就先放下了。

the elements of computing systems 的读书笔记2的更多相关文章

  1. 2016/2/13 《计算机系统要素》(The Elements of Computing Systems)读书笔记(1)

    过年期间一直在啃一本书,学习计算机组成原理. 这是一本很棒的书,是一个基于项目的学习过程.可以让人理解的很深刻. coursera上有这本书前半部分的教程,是由书的作者团队们开的课,个人认为很棒,可惜 ...

  2. the elements of computing systems 的读书笔记1

    想转职程序猿,还真不是说懂一门语言就够的了,想要继续进步,必须懂其相关实现原理,比如这些底层的构造.最近看的就是这一本计算机入门级的书,但是对我这个纯自学的人来说真是能学到很多. 这本书从最基本的Na ...

  3. 【读书笔记】《Computer Organization and Design: The Hardware/Software Interface》(1)

    笔记前言: <Computer Organization and Design: The Hardware/Software Interface>,中文译名,<计算机组成与设计:硬件 ...

  4. TJI读书笔记15-持有对象

    TJI读书笔记15-持有对象 总览 类型安全和泛型 Collection接口 添加元素 List 迭代器 LinkedList 栈 Set Map Queue Collection和Iterator ...

  5. 《C#图解教程》读书笔记之六:接口和转换

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.接口那点事儿 (1)什么是接口? 一组函数成员而未实现的引用类型.只有类和结构能实现接口. (2)从ICom ...

  6. 图解TCP/IP读书笔记(一)

    图解TCP/IP读书笔记(一) 第一章 网络基础知识 本学期的信安概论课程中有大量的网络知识,其中TCP/IP占了相当大的比重,让我对上学期没有好好学习计算机网络这门课程深感后悔.在老师的推荐下开始阅 ...

  7. 【Tools】Pro Git 一二章读书笔记

    记得知乎以前有个问题说:如果用一天的时间学习一门技能,选什么好?里面有个说学会Git是个很不错选择,今天就抽时间感受下Git的魅力吧.   Pro Git (Scott Chacon) 读书笔记:   ...

  8. HTML5&CSS3读书笔记

    Hi All, 分享一下我学HTML5 摘抄的读书笔记(我用的还是英文,因为一些新的东西还是来自于欧美国家,希望大家习惯于看一些英文材料): 1. Difference between Section ...

  9. 【读书笔记与思考】《python数据分析与挖掘实战》-张良均

    [读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...

随机推荐

  1. python基础===一行 Python 代码实现并行(转)

    原文:https://medium.com/building-things-on-the-internet/40e9b2b36148 译文:https://segmentfault.com/a/119 ...

  2. 22 Gobs of data 设计和使用采集数据的包

    Gobs of data 24 March 2011 Introduction To transmit a data structure across a network or to store it ...

  3. Scrapy的【SitemapSpider】的【官网示例】没有name属性

    Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0, 上午看了Scrapy的Spiders官文,并按照其中的SitemapSpider的示例练习,发现官文的示例存在问题 ...

  4. mybatis 控制台打印sql脚本

    在mybatis-config.xml文件中加一句 <setting name="logImpl" value="STDOUT_LOGGING" /> ...

  5. 洛谷P2017晕牛

    传送门啦 这个题没有想象中复杂. 我们先有向边建立,因为我们无法改变有向边的方向. 建立完之后跑一边拓扑排序,我们按拓扑序小的指向大的就好了. 解释: 我们知道如果一个点在另一个点顺序的后面的话,如果 ...

  6. numpy数学计算

    1.求范数 np.linalg.norm norm(x, ord=None, axis=None, keepdims=False)  范数理论的一个小推论告诉我们:ℓ1≥ℓ2≥ℓ∞

  7. SQL中EXCEPT和Not in的区别?

    初始化两张表: CREATE TABLE tb1(ID int) INSERT tb1          SELECT NULLUNION  ALL          SELECT NULLUNION ...

  8. linux虚拟机磁盘不够用以及进行扩容时遇到的问题

    我使用的是:gparted live cd工具  系统是centOS6.2 使用gparted live cd工具进行无损分区,方法很简单,下载iso文件都在VMware对应的linux系统上设置CD ...

  9. 非ROOT用户不能识别声卡问题

    将非ROOT用户加入到audio组中即可 sudo usermod -a -G audio usrname

  10. Eclipse中syso 快捷键 Alt + / 不能使用的问题

    通过使用windows-preferences-java-editor-templates中的快捷键,可以显著提升输入速度.快捷键的设置一般是在这里以及general下面的keys里面设置. 但是,在 ...