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数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
随机推荐
- 如何更方便的查看Linux内核代码的更新记录【转】
转自:http://blog.csdn.net/lee244868149/article/details/44302819 Linux内核的更新非常的快,如何快速的了解这些更新呢?最一般的办法就是把新 ...
- Meltdown论文翻译【转】
转自:http://www.wowotech.net/basic_subject/meltdown.html#6596 摘要(Abstract) The security of computer sy ...
- aarch64_l3
librdmacm-utils-1.1.0-4.fc26.aarch64.rpm 2017-02-12 07:12 87K fedora Mirroring Project libreadline-j ...
- HttpClient使用
1.HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包 2.主要的功能 (1)实现了所有 H ...
- [ python ] 学习目录大纲
简易博客[html+css]练习 MySQL 练习题及答案 MySQL视图.触发器.函数.存储过程 MySQL 操作总结 Day41 - 异步IO.协程 Day39/40 - 线程的操作 Day36/ ...
- echarts一些笔记
console.log(); 浏览器显示 $.ajax({ url : "ajax/echartWelcome.action", type : "post", ...
- java 添加一组元素
在java包中的Arrays和Collection类中都有很多实用方法,可以在一个Collection中添加一组元素,Array.asList()方法接受一个数组或是一个用逗号分隔的元素列表(使用可变 ...
- Oracle学习笔记:11g服务介绍及哪些服务必须开启?
由于工作环境中oracle版本为10g,不支持行转列函数pivot,特在自己电脑上安装了oracle 11g,但因为不经常使用,便把服务自动启动给关闭了,只在需要使用时手动启动,因此记录一下需要启动的 ...
- Java小实验之数据转换
看到有人问如图的程序,就去写了几行代码,顺便复习一下条件语句和ASCII码 import java.util.Scanner; public class test1 { public static v ...
- Registry私有仓库搭建及认证
本节内容: Registry相关概念 Registry V1和V2 安装Docker 搭建本地registry v2 搭建外部可访问的Registry 添加认证 更高级的认证 registry web ...