计算机指令

深入理解计算机系统【一】

匿名 (未验证) 提交于 2019-12-02 23:57:01
  引用与查看了:    https://www.cnblogs.com/ylhwx/p/7801058.html    https://blog.csdn.net/strliu/article/details/7906017   这周开始看深入理解计算机系统,也是计算机4大基础书中最后一本我没看过的了。   周日在办公室里听着歌写读书笔记,也是别有一番滋味了。   刘大给了3个题目   1. 信息=位+上下文, 什么是上下文? 工作中有哪些例子    2. RISC指令集和CISC指令集有什么区别,它们的典型CPU有哪些?    3. 基于栈的"CPU"和基于寄存器的"CPU"有什么区别。   一个个来吧,   系统所有信息都是由位组成的,区分位表示不同的含义,就是上下文,上下文就是程序的运行环境。英文叫context;   和语文中的上下文差不多,结合前后文,一句话有不同的意思吧。就像js和java中,有不同关键字?还看到个轮子哥解释,说上下文就是方法形参??   --第二个问题   RISC指令集是精简指令集计算机;CISC是复杂指令集计算机   他们区别是不同CPU的设计理念和方法。   CISC是用最少机器语言指令来完成所需的计算任务。这种架构会增加CPU结构的复杂和CPU工艺的要求,对编译器开发有利。到今天只有Intel及其兼容CPU还在使用这种架构。  

深入浅出计算机组成原理:冒险和预测(三):CPU里的“线程池”(第24讲)

匿名 (未验证) 提交于 2019-12-02 23:56:01
一 、引子 过去两讲,我为你讲解了通过增加资源、停顿等待以及主动转发数据的方式,来解决结构冒险和数据冒险问题。对于结构冒险,由于限制来自于同一时钟周期不同的指令, 要访问相同的硬件资源,解决方案是增加资源。对于数据冒险,由于限制来自于数据之间的各种依赖,我们可以提前把数据转发到下一个指令。 但是即便综合运用这三种技术,我们仍然会遇到不得不停下整个流水线,等待前面的指令完成的情况,也就是采用流水线停顿的解决方案。比如说,上一讲里最后给你的例子, 即使我们进行了操作数前推,因为第二条条加法指令依赖于第一条指令从内存中获取的数据,我们还是要插入一次NOP的操作。 那我们能不能让后面没有数据依赖的指令,在前面指令停顿的时候先执行呢? 答案当然是可以的。毕竟,流水线停顿的时候,对应的电路闲着也是闲着。那我们完全可以先完成后面指令的执行阶段。 二、填上空闲的NOP:上菜的顺序不必是点菜的顺序 之前我为你讲解的,无论是流水线停顿,还是操作数前推,归根到底,只要前面指令的特定阶段还没有执行完成,后面的指令就会被“阻塞”住。 但是这个“阻塞”很多时候是没有必要的。因为尽管你的代码生成的指令是顺序的,但是如果后面的指令不需要依赖前面指令的执行结果,完全可以不必等待前面的指令运算完成。 比如说,下面这三行代码。 计算里面的 x ,却要等待 a 和 d 都计算完成,实在没啥必要。所以我们完全可以在 d

1.5-计算机执行指令的过程

隐身守侯 提交于 2019-12-02 23:48:40
  执行指令是计算机过程的核心, 理解了指令如何执行呢,也就把握住了计算机运行原理的关键。 在这一节,我们就一起来看这个模型机是如何执行指令的。   现在我们已经有了这样一个模型 而且我们也知道了计算机执行一条指令的主要步骤包括取指、译码、执行、回写。 那我们就像在这个模型机上尝试执行一条计算机的指令。 这里给出了一个例子,我们想执行的这条指令是ADD R0, [6],这样的一个指令格式代表什么含义呢?从外边,我应该能看出来这是一条加法指令。 那么这个加法应该有两个源操作数,其中一个就是通用寄存器R0的内容; 另一个[6],中括号就代表是存储单元的内容。 那么,中括号里面带一个6说明是地址为6的存储单元的内容。 我们把这两个原操作数相加,就可以得到一个运算结果。 那么,在我们这种格式指令当中,默认第一个操作数即是源操作数又是目的操作数。 这个运算结果就会更新到通用寄存器R0中。   现在我们就来看这条指令是如何在模型机上执行的。 假设模型机的当前状态已经有了一些初始值, 我们需要注意的是CPU中的R0 所保存的值是00000011,这等于10进制的3。 而存储单元地址为6的存储单元的内容是00000010, 相当于10进制的2。 那么我们所要做的,就是把这个存储单元的数和R0当中的数相加,最后再放到R0中。 我们还看到PC寄存器也就是指向下一条指令地址的寄存器,保存的值是 0001

1.4-计算机结构的简化模型

风流意气都作罢 提交于 2019-12-02 23:45:46
  为了掌握计算机的内部结构, 我们要先来构建一个计算机的简化模型。 这个模型能够体现计算机内部的关键之处。 又足够的简单,便于理解。   这个冯诺依曼结构的餐馆,我们已经非常熟悉了。 我们都可以根据这个餐馆的结构几乎一一对应的来构造出我们的计算机结构的 模型。这个计算机结构的简化模型我们又称之为模型机。 目前包含了CPU和存储器两大布局,中间通过系统总线相连。 系统总线又被细化为控制总线、地址总线和数据总线三个部分。 CPU和存储器内部各有相应的结构。    我们现在就来逐个部件的说明这个模型机是如何构建的。 首先来看存储器。 在设计计算机时要确定存储器的编制方式。 如果存储器按字节编制,那每一个存储单元就能存放八位的二进制数。 而且每个存储单元的地址是唯一的。 CPU要想访问某个存储单元,必须要通过地址总线给出相应的地址, 因此如果地址总线的宽度为N,则CPU能管理的存储单元数最多为2的N次方个, 假设地址总线的宽度为32位,那么CPU能管理的存储单元数就是2的32次方,就是4G。 CPU发来的地址将会存放在存储器地址寄存器,简称为MAR。 那CPU要读写的数据则会通过数据总线传送,数据总线的宽度一般为存储单元位宽的整数倍, 对应的数据则会放在 一个被称为存储器数据寄存器,简称为MDR 的结构中,最后 控制总线与存储器当中的控制总机相连

hello world是怎样运行的?

匿名 (未验证) 提交于 2019-12-02 23:43:01
原作者csdn博客: https://blog.csdn.net/jjdiaries/article/category/1644301 关于《 深入理解计算机系统 》 “这本书的中译名为 “ 深入理解计算机系统 ” ,我非常,十分,以及百分之一百二十地不满意。我这么说的原因在于这个译法完全扭曲了书的本意。如果直译原书名,应该是类似于 “ 以程序员的视角理解计算机系统 ” ,何来 “ 深入 ” 二字。可能在国内编辑看来,这是讲系统的,用 C 和汇编语言的,因此很 “ 深入 ” ,但我认为这只能说明国内技术氛围的浅薄。因为事实上,这是一本入门级别的书,这本书其实并不 “ 深入 ” ,它谈论的内容还是相对比较浅的。但 “ dz ” 不代表 “ 浅薄 ” ,写一本面向初学者的好书往往是非常困难的,因此无论是 SICP 还是 CSAPP ,它的作者都是顶尖学府的教授,结合多年教学经验而写出来的。 CMU 把这本书作为 课程的教材,是面向计算机专业低年级学生的 “ 计算机系统介绍(导论) ” ,可能这些学生只是刚刚了解如何使用一门高级语言 ―― 如 Java 进行编程,对于计算机系统的工作方式等话题可谓一点都没有接触过,而 CSAPP 对读者的背景也只要求是 “ 一些编程经验 ” 而已。这本书的话题覆盖面很广,从计算机的基本组成,二进制数据表示方式,到机器级别的指令, CPU 工作方式

1.3-冯·诺依曼结构的小故事

只谈情不闲聊 提交于 2019-12-02 23:40:27
如果一开始就深入到计算机内部的复杂结构中,也许会让人有些迷惘。我们还是用一个轻松愉快的方式来入手。通过一个餐馆的小故事来了解冯诺依曼结构是如何运转的。 冯诺依曼结构的计算机就好比这个餐馆,CPU就是厨房,而主存就是仓库,仓库里的货架就好比主存当中的存储单元,我们为货架的每一格都编上了一个序号,相当于主存当中的地址,货架上存放的物品相当于存储单元当中的内容,主存中会存放着计算机的指令,还有数据,对于这个餐馆来说就是厨师需要执行的任务和做菜所用的原料,那厨房当中承担主要控制任务的就是这位大厨了,它也是控制器,而运算器则是炊具。那我们还需要一些附加的设备。这个厨师记性很不好,他必须要在身边 有一张纸,上面写着下一张任务单的位置,这里这张纸上写了1,厨师就知道我下一张任务单放在仓库的第一格,那么如果把任务单取回来以后还需要放在身边随时的查看所以他还可以有一个放置当天任务单的位置。如果取来了任务单就放在这。那厨师做菜,做完了菜放哪呢,不能直接端着锅冲到仓库去吧。所以他身边操作台上总得放几个盘子,相当于CPU当中我们就称这些盘子为通用寄存器。 用于临时存放计算器的运算结果或者要送到运算器的操作数。我们有可能从主存当中事先会取来一些操作数,当然也需要执行指令去取来一些操作数,先放到通用寄存器当中,那好这个餐馆是如何运转的呢?   我们就让它像计算机的运转一样,计算机运转的核心内容就是执行指令

VUE

匿名 (未验证) 提交于 2019-12-02 23:34:01
vue 框架 1.vue vue 是一套构建用户界面的渐进式框架 偏向于 视图层 view (component 组件) API 齐全 简单明了 的前端框架 vue 采用自下而上的增量开发设计 vue 实现 单页面应用 SPA single page appliaction 通过路由匹配组件和数据 (vue-router) 设计模式 单例模式 工厂模式 代理模式 发布订阅模式 观察者模式 设计思想 MVC ===> angular1/angular2 react M model 数据层 data V view 视图层 组件/模板/html C controller 逻辑层 函数 MVVM ===> vue (不完全遵循) M model 数据层 data binding V view 视图层 DOM listen VM viewmodel VM实例对象 通过vue把数据 data 和视图 html 绑定在一起 MVP m model 数据层 v view 视图层 p presenter 逻辑层 组件系统 因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用 组件就意味着 由虚拟dom组成 抽象层 virtual DOM 一个组件本质上是一个拥有预定义选项的一个 Vue 实例 渲染函数 render vue render(createElement){ return

《深入理解计算机系统》阅读笔记--程序的机器级表示(上)

匿名 (未验证) 提交于 2019-12-02 21:59:42
一、为什么要学习和了解汇编 编译器基于编程语言的规则,目标机器的指令集和操作系统遵循的惯例,经过一系列的阶段生成机器代码。GCC c语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指令。然后GCC调用汇编和链接器,根据汇编代码生成可执行的机器代码。这一章节其实就是来更加深入的认识和理解汇编代码 现在我们更多接触的都是一些高级语言,如JAVA,GO,Python,其实用这些语言的时候,更大程度上,已经屏蔽了一些程序的细节,即机器级的实现。但是如果是用汇编语言,程序员就必须制定程序用来执行计算的低级指令。 那么为什么我们还要学习和了解汇编呢? 虽然现在编译器已经替我们做了生成汇编代码的大部分工作,但是作为程序员,如果我们能够阅读和理解汇编代码将是一个非常重要的技能,好处是: 能够理解编译器的优化能力分析代码中隐含的低效率 如我们通过线程包写并发程序时,了解不同线程是如何共享程序数据或保持数据私有的,以及准确知道如何在哪里访问共享数据,这些在机器代码都是可见的 二、历史 Inter的处理器系统俗称x86,第一代处理器是8086,一个单芯片,16位微处理器,主要为 IBM PC 和 DOS 设计,有 1MB 的地址空间。八年后的 1985,第一个 32 位 Intel 处理器(IA32) 386 诞生。2004 年,奔腾(Pentium) 4E

Linux――vim编辑器

匿名 (未验证) 提交于 2019-12-02 21:59:42
vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。 一、vi的使用 基本上 vi 共分为三种模式,分别是『一般指令模式』、『编辑模式』与『指令列命令模式』。 一般指令模式 (command mode) 以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式,也简称为一般模式)。在这个模 式中, 你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整列』来处 理文件内容, 也可以使用『复制、贴上』来处理你的文件数据。 编辑模式 (insert mode) 在一般指令模式中可以进行删除、复制、贴上等等的动作,但是却无法编辑文件内容的! 要等到 你按下『i, I, o, O, a, A, r, R』等任何一个字母之后才会进入编辑模式。注意了!通常在 Linux 中,按下这些按键时,在画面的左下方会出现『 INSERT 或 REPLACE 』的字样,此时才可以进 行编辑。而如果要回到一般指令模式时, 则必须要按下『Esc』这个按键即可退出编辑模式。 指令列命令模式 (command-line mode) 在一般模式当中,输入『 : / ? 』三个中的任何一个按钮,就可以将光标移动到最底下那一列。在 这个模式当中, 可以提供你『搜寻资料』的动作,而读取、存盘、大量取代字符、离开 vi 、显 示行号等等的动作则是在此模式中达成的! (一

Java并发编程:volatile关键字解析

匿名 (未验证) 提交于 2019-12-02 21:53:52
Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。   volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一下与内存模型相关的概念和知识,然后分析了volatile关键字的实现原理,最后给出了几个使用volatile关键字的场景。   以下是本文的目录大纲:   一.内存模型的相关概念   二.并发编程中的三个概念   三.Java内存模型   四..深入剖析volatile关键字   五.使用volatile关键字的场景   若有不正之处请多多谅解,并欢迎批评指正。   请尊重作者劳动成果,转载请标明原文链接:    http://www.cnblogs.com/dolphin0520/p/3920373.html 一.内存模型的相关概念   大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题