懒癌发作,本来计划是两到三天就一个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. 【算法学习】有旋treap

    treap是平衡树的一种.与其他平衡树一样,它也能够支持插入和删除,求第k极值等,接下来我们主要探讨有旋treap的实现过程. treap中每个节点要维护其值,左右孩子以及子树大小.父亲要不要写则看你 ...

  2. Linux内核触摸屏驱动--多点触摸 【转】

      转自:http://blog.chinaunix.net/uid-24227137-id-3127126.html 简介 为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指 ...

  3. Mysql 监控性能状态 QPS/TPS【转】

    QPS(Query per second) 每秒查询量 TPS(Transaction per second)每秒事务量 这是Mysql的两个重要性能指标,需要经常查看,和Mysql基准测试的结果对比 ...

  4. 全面了解Nginx主要应用场景【转】

    前言 本文只针对 Nginx 在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得.所以还请见谅,同时欢迎留言交流 ...

  5. python使用twisted搭建的一个socket服务

    服务端 # -*- coding: utf-8 -*- # @Time : 2018/9/19 21:41 # @Author : cxa # @File : tsTservTW.py # @Soft ...

  6. mybatis待研究

    1. mapper 中_parameter 的含义,是 参数? 为什么?

  7. python面向对象(四)之抽象类与接口

    ​ 学过java的应该知道java有抽象类和接口的那么python呢?(以前写的关于java抽象类的笔记java抽象类与接口) python作为一个动态语言,没有强类型的检查,而是以鸭子类型的方式提现 ...

  8. wpf image blur

    RenderOptions.BitmapScalingMode="NearestNeighbor"

  9. 编写组件TComponent published $M+ 问题

    报错如下: PUBLISHED caused RTTI ($M+) to be added to type 修改成下面这样之后: 解决问题 方法: 来自:http://www.cnblogs.com/ ...

  10. HBase入门笔记--读性能优化

    一.前言 在生产环境使用HBase过程中,随着数据量的不断增加,查询HBase数据变得越来越慢,对于业务来说是不可用的,需要对读性能进行优化 二.问题定位 从hbase监控指标来看,发现FullGC次 ...