the elements of computing systems 的读书笔记2
懒癌发作,本来计划是两到三天就一个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的更多相关文章
- 2016/2/13 《计算机系统要素》(The Elements of Computing Systems)读书笔记(1)
过年期间一直在啃一本书,学习计算机组成原理. 这是一本很棒的书,是一个基于项目的学习过程.可以让人理解的很深刻. coursera上有这本书前半部分的教程,是由书的作者团队们开的课,个人认为很棒,可惜 ...
- the elements of computing systems 的读书笔记1
想转职程序猿,还真不是说懂一门语言就够的了,想要继续进步,必须懂其相关实现原理,比如这些底层的构造.最近看的就是这一本计算机入门级的书,但是对我这个纯自学的人来说真是能学到很多. 这本书从最基本的Na ...
- 【读书笔记】《Computer Organization and Design: The Hardware/Software Interface》(1)
笔记前言: <Computer Organization and Design: The Hardware/Software Interface>,中文译名,<计算机组成与设计:硬件 ...
- TJI读书笔记15-持有对象
TJI读书笔记15-持有对象 总览 类型安全和泛型 Collection接口 添加元素 List 迭代器 LinkedList 栈 Set Map Queue Collection和Iterator ...
- 《C#图解教程》读书笔记之六:接口和转换
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.接口那点事儿 (1)什么是接口? 一组函数成员而未实现的引用类型.只有类和结构能实现接口. (2)从ICom ...
- 图解TCP/IP读书笔记(一)
图解TCP/IP读书笔记(一) 第一章 网络基础知识 本学期的信安概论课程中有大量的网络知识,其中TCP/IP占了相当大的比重,让我对上学期没有好好学习计算机网络这门课程深感后悔.在老师的推荐下开始阅 ...
- 【Tools】Pro Git 一二章读书笔记
记得知乎以前有个问题说:如果用一天的时间学习一门技能,选什么好?里面有个说学会Git是个很不错选择,今天就抽时间感受下Git的魅力吧. Pro Git (Scott Chacon) 读书笔记: ...
- HTML5&CSS3读书笔记
Hi All, 分享一下我学HTML5 摘抄的读书笔记(我用的还是英文,因为一些新的东西还是来自于欧美国家,希望大家习惯于看一些英文材料): 1. Difference between Section ...
- 【读书笔记与思考】《python数据分析与挖掘实战》-张良均
[读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
随机推荐
- python几种装饰器的用法
用函数装饰函数 这种比较常见首先定义装饰器函数 def cache(func): data = {} @wraps(func) def wrapper(*args, **kwargs): key = ...
- 二十、springboot之jpa开发@MappedSuperclass 注解说明
@MappedSuperclass使用条件: 当我们进行开发项目时,我们经常会用到实体映射到数据库表的操作,此时我们经常会发现在我们需要映射的几个实体类中,有几个共同的属性,例如编号ID,创建者,创建 ...
- SpringCloud常用注解
一 @EnableDiscoveryClient,@EnableEurekaClient的区别 SpringCLoud中的“Discovery Service”有多种实现,比如:eureka, con ...
- python网络编程-paramiko
python基础学习日志day8-paramiko 一:简介 Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 现有这样的需求:需要使用windows客户端,远程连 ...
- git —— 远程仓库(创建)
一.SSH设置 1.创建SSH Key 在用户主目录下,看看有没有.ssh目录, 如果有,再看看这个目录下 有没有id_rsa和id_rsa.pub这两个文件, 如果已经有了,可直接 跳到下一步. 如 ...
- 洛谷P3119 草鉴定
这个题调了一天.. 传送门 读完题目之后我们不难想出这个题是个tarjan缩点问题,因为尽量多的经过草场,所以一号点所在的强连通分量里左右的点都是不需要在进行走逆向边,所能到达的. 然后问题就落在怎么 ...
- emacs设置了单例模式后无法设定文件关联解决办法
emacs设置单例模式的本质就是使用下列参数启动: C:\emacs-24.5\bin\emacsclientw.exe --no-wait --alternate-editor="C:\e ...
- [C++]返回最值元素
1 priority_queue C++中优先队列是一种特殊的队列,能够返回队列中优先级最大或者最小的元素,其内部是由堆实现的,个人认为这种方式使用更加直观. 1.1 返回vector中的最值元素 # ...
- JavaScript中的数据结构及实战系列
本系列主要是讲解JavaScript中的数据结构及在实际项目中遇到的地方 JavaScript中的数据结构及实战系列(1):队列 JavaScript中的数据结构及实战系列(2):栈
- Kafka(四)Kafka在zookeeper中的存储
一 Kafka在zookeeper中存储结构图 二 分析 2.1 topic注册信息 /brokers/topics/[topic] : 存储某个topic的partitions所有分配信息 [zk: ...