懒癌发作,本来计划是两到三天就一个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. oracle同义词是什么意思?

    相当于alias,比如把user1.table1 在user2中建一个同义词table1create synonym table1 for user1.table1;这样当我们在user2中查sele ...

  2. 公司内网yum源

    新增yum源配置文件 vi /etc/yum.repos.d/szyum.repo 内容如下: #[redhat6.3] [base] name=redhat63 baseurl=http://10. ...

  3. 数据库-mysql安装

    MySQL 安装 所有平台的Mysql下载地址为: MySQL 下载. 挑选你需要的 MySQL Community Server 版本及对应的平台. Linux/UNIX上安装Mysql Linux ...

  4. 常见四大类型视频接线DP、HDMI、DVI、VGA的比较

    如今是新的“视”界,生活中总与各种屏幕打交道,难免会遇到选择视频接线的问题,要想搞清楚这点,我们只要通过了解现今常用的几种视频接线就会有个大致的认识.   281VGA.DVI.HDMI三种视频信号接 ...

  5. AdvStringGrid 点击标题头 自动排序

  6. LongAdder类学习笔记

    优秀原文 LongAdder | LongAccumulator简介 源码阅读:全方位讲解LongAdder 说到LongAdder,不得不提的就是AtomicLong.AtomicLong是JDK1 ...

  7. <编程之美>经典面试题:求二叉树节点的最大距离(我的解法,最容易理解的版本?)

    题目介绍: 如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的个数. 写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 如下图所示, ...

  8. 【笔记】Python简明教程

    Python简明教程,此资源位于http://woodpecker.org.cn/abyteofpython_cn/chinese/ s=u'中文字符' #u表示unicode,使用u之后能正常显示中 ...

  9. spring-boot分环境打包为war包

    1.启动类修改 @EnableSwagger2 @SpringBootApplication public class CustWebAcApplication extends SpringBootS ...

  10. Zookeeper学习笔记-概念介绍

    目录 概念 背景介绍 zookeeper一致性 使用建议 概念 ZooKeeper是一个开源的分布式协调服务,它为分布式应用提供了高效且可靠的分布式协调服务,提供的功能包括:配置维护.域名服务.分布式 ...