计算机指令

计算机体系结构学科笔记(实时更新)

别等时光非礼了梦想. 提交于 2020-02-26 14:11:48
2.26学科笔记 *冯诺依曼计算机,存储程序的计算机,五大部件(输入,输出,控制器,运算器,存储器) *存储程序计算机 ,实现了一种通用的图灵机(理念),一种计算机系统设计模型 *特点; 运算器为中心,指令和数据的地位是一样的都存在存储器,存储器按地址访问,线性编址,控制流是由指令流组成的,指令(操作码和地址码),数据以二进制编制,采用二进制运算 指令,程序 一条指令的操作的五个步骤: 取指令--指令译码--取操作数--运算--结果写回(循环) 硬件执行快,软件比较灵活多样 概念:计算机系统设计的技术,方法和理论。主要包括:指令系统,组成,硬件实现,性能评价 多语言层次结构:微程序机器级--机器语言机器级--操作系统虚拟机--汇编语言虚拟机--高级语言虚拟机--应用语言虚拟机 来源: CSDN 作者: SYC20171868 链接: https://blog.csdn.net/weixin_41499217/article/details/104511875

JVM指令重排问题总结

岁酱吖の 提交于 2020-02-26 08:25:48
为什么会发生指令重排: 计算机内存操作速度远慢于CPU运行速度所以就带来的CPU空置的问题,虚拟机会按照自己的一些规则会跳过执行慢的代码,去执行快的代码,从而提升jvm的整体性能。 加锁并不能防止指令重排: 典型的单例双重锁模型,就会发生空指针异常,这个可以证明这个结论。 volatile关键字 设计的三个特征是:线程可见、不具备原子性、禁止指令重排, volatile 的读性能消耗与普通变量几乎相同,但是写操作稍慢,因为它需要在本地代码中插入许多内存屏障指令来保证处理器不发生乱序执行。 变量依赖 : 编译器将不会对存在数据依赖性的程序指令进行重排,这里的依赖性仅仅指单线程情况下的数据依赖性;多线程并发情况下,此规则将失效。 来源: oschina 链接: https://my.oschina.net/u/4124756/blog/3165255

编程之路

孤街醉人 提交于 2020-02-26 02:59:49
一、什么是编程?为什么要编程? 编程既是编程序、写代码。编写程序既是让机器替代人工作,解放人的双手 二、有哪些编程编程语言? 机器语言: 计算机内部只能接受二进制代码,因此,用二进制代码0和1描述的指令称为机器指令,全部机器指令的集合构成计算机的机器语言,用机器语言编程的程序称为目标程序。只有目标程序才能被计算机直接识别和执行。 汇编语言: 汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作。 高级语言: 不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。 高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行 总结 机器语言 优点是最底层,速度最快,缺点是最复杂,开发效率最低 汇编语言 优点是比较底层,速度最快,缺点是复杂,开发效率最低 高级语言 编译型语言执行速度快,不依赖语言环境运行,跨平台差;开发效率低,运行速率高 解释型跨平台好,一份代码,到处使用,缺点是执行速度慢,依赖解释器运行;开发效率高,运行速率低 来源: https://www

X86汇编1.汇编语言基础

我与影子孤独终老i 提交于 2020-02-26 02:32:25
最近学习了X86汇编,其实无论是古老的8086还是现在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位数,寻址空间,寄存器个数,指令集的扩充等方面有所不同,对于学习,8086永不过时。 1.比特、字节、字、双字 在计算机中: 1比特:1位 1字节:8位 1字:16位 ,15-8(高字节)---> 7-0(低字节) 1双字:31-16(高字)---> 15-0(低字) 2.指令和指令集 机器指令就是一列二进制数字,计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。 机器语言就是机器指令的集合。 指令一般由操作码和操作数构成,也有些指令只有操作码,没有操作数。 小端序:或叫低端字节序,内存高字节存放在高地址,内存的低字节保存在低地址 大端序:与小端序相反 指令和数据为什么要分开存放: 因为指令和数据都是二进制数,是一模一样的,即:都是一些由高低电平组和,而处理器是自动按顺序提取指令并加以执行的,在指令中混杂数据会导致处理器不能正常工作,因此,指令和数据要分开存放。存放代码的区域叫代码区,存放数据的区叫数据区,联想一下:一个二进制程序的代码段和数据段也是分开存放的。 3.汇编语言 处理器都是依靠机器指令来工作的,但是机器指令是一些没有规律的数字,编写机器指令的程序,难以书写,难以阅读,难以理解,这样就发明了汇编语言。

【系统分析师之路】第十二章 计算机组成与体系结构(习题汇总)

怎甘沉沦 提交于 2020-02-26 02:20:38
【系统分析师之路】第十二章 计算机组成与体系结构(习题汇总) ■知识点汇总 知识点汇总 ■习题汇总 01.Flynn分类法根据计算机在执行程序过程中()的不同组合,将计算机分为四类,当前主流的多核计算机属于()计算机。 A.指令流和数据流 B.数据流和控制流 C.指令流和控制流 D.数据流和总线宽带 A.SISD B.SIMD C.MISD D.MIMD 解答:答案选择A|D。 MISD:多指令单数据流。只有理论上存在的可能性。 SIMD:单指令多数据流。它的代表有超级向量处理器,阵列处理机,并行处理机。它的关键特征是各处理器以异步的方式执行同一条指令。 02.以下关于复杂指令集计算机弊端的叙述中,错误的是()。 A.指令集过分庞杂 B.每条复杂指令需要占用过多的CPU周期 C.CPU中的寄存器过多,利用率低 D.强调数据控制,导致设计复杂,研制周期长 解答:答案选择C。只有精简指令集才操作寄存器,复杂指令集是因为变长和指令繁多等缘故,所以利用率才不高。精简指令集适用于流水线技术中,它可有效支持高级语言。 03.设每条指令由取址,分析和执行三个部件完成,并且每个部件的执行时间均为t。若采用常规标量单流水线处理机(即该处理器的度为1),连续执行16条指令,则共耗时()t;若采用度为4的超标量流水线处理机,连续执行上述16条指令,则共耗时()t。 A.16 B.18 C.32 D.48

Linux学习

末鹿安然 提交于 2020-02-25 19:28:38
Linux教程 Linux的应用领域 个人桌面领域 此领域是Linux应用最薄弱的环节,但是催着Deepin等,桌面占有率有所回升 服务器领域 此领域是服务器的应用是最强的,Linux免费、稳定、高效等特点在这里得到了很好的体现 嵌入式领域 Linux运行稳定、对网络良好支持性、低成本,内核最小可以几百kb等 Linux进阶之路 linux环境下基本操作命令、文件操作命令、编辑工具使用、linux用户管理 linux中各种配置 linux下搭建开发环境 shell脚本、对Linux服务器进行维护 进行安全设置、防止攻击,保障服务器正常运行,对系统调优 深入理解linux(对内核有研究),熟练掌握大型网站应用架构组成、熟悉各个环节的部署与维护 一、Linux入门 1.1 Linux介绍 Linux是一款操作系统,免费,开源 ,安全,高效,稳定,处理高并发非常强悍 Linux创始人 linus 林纳斯 Linux吉祥物 Linux发行版 RedHat Ubuntu Suse opensuse 目前主要的操作系统 windows android linux ios 车载系统 1.2 Linux与Unix的关系 贝尔实验室 与 麻省理工学院 , 通用电气公司 开发 分时操作系统 ,后感觉太过庞大,故遗弃。 后来 Ken tompson 肯•汤普森 在此基础上,使用B语言开发了 Unix系统

JVM学习——字节码(学习过程)

旧街凉风 提交于 2020-02-23 12:23:15
JVM——字节码 为什么要学字节码 字节码文件,有什么用? JVM虚拟机的特点:一处编译,多处运行。 多处运行,靠的是.class 字节码文件。 JVM本身,并不是跨平台的。Java之所以跨平台,是因为JVM本身不夸平台。 二进制的文件,显然不是给人看的。是给机器看的。 从根源了解了之后,返回到语言层次 好多都会豁然开朗。 必须要学,学一个东西,还需要理由吗? Java语言规范补充: JVM虚拟机规范(相对底层的)Java,Groovy,kotlin,Scala。 编译后都是Class文件,所以就都能在JVM虚拟机上运行。 字节码:枯燥且重要 字节码文件解读 一个Java类,然后进行编译成字节码文件 package com.dawa.jvm.bytecode; public class MyTest1 { private int a = 1; public int getA() { return a; } public void setA(int a) { this.a = a; } } javap 编译后的结果: ➜ main javap com.dawa.jvm.bytecode.MyTest1 Compiled from "MyTest1.java" public class com.dawa.jvm.bytecode.MyTest1 { public com.dawa

C语言的编译过程

柔情痞子 提交于 2020-02-23 09:22:22
C语言的编译过程 c语言的过程是:预处理->编译->汇编->链接 预处理 预处理主要是将宏定义,条件预编译指令,注释和头文件处理掉。 其中主要步骤包括: 将所有的#define删除,保留他所定义的内容; 处理条件预编辑指令,如#if,#ifed,#if,#elif,#endif 处理"#include"预编译指令,将包含文件插入到预编译指令,用递归方法进行,文件内可能包含其他文件。 删除所有注释。 添加行号和文件标识,以便编译时产生调试时使用的行号和编译错误警告行号。 保留#pragma编译指令,编译器需要使用它们。 预处理的使用: 首先创建一个名字为hello.c的文件 #include<stdio.h> int main() { printf("hello,world!\n"); return 0; } 以下代码用在Liunx系统中使用 预处理命令: gcc -E hello.c -o hello.i gcc -E -P hello.c -o hello.i 可以使用cat hello.i来查看预处理后的代码。 编译 主要作用:扫描,语法分析,语义分析,源代码优化,代码生成,目标代码优化。 编译就是通过词法分析和语法分析,在确认所有资料指令都符合语法规则之后,将其翻译成等价的中间代码或者汇编代码。 编译阶段会对代码进行优化处理,不仅涉及到编译技术本身,还涉及到机器的硬件环境

计算机基础

只愿长相守 提交于 2020-02-23 03:34:33
1、基础概念 寄存器:嵌入到CPU中的内存,也可以理解为CPU里面的存储器,一个CPU有多个寄存器; 总线:连接CPU和其它芯片的导线; 总线在物理上:是一根根导线的集合;逻辑上分为:地址总线、数据总线、控制总线 地址总线:CPU通过地址总线来指定存储单元的。根据地址总线的根数来确定最大的寻址; 数据总线:CPU与内存或其它器件的数据传送;数据总线的宽度决定了CPU和外界数据的传送速度; 控制总线:用来控制外部器件;无非就是读/写; CPU可以直接使用的信息在存储器中存放; 总结:地址总线决定CPU的寻址能力;数据总线决定一次数据传送量;控制总线决定CPU对其它器件的控制能力; 主板上有核心器件和主要器件(他们通过地址、数据、控制)总线来连接;接口卡; 存储器:(1)、读写属性分:随机存储器(RAM)、只读存储器(ROM); (2)、功能上分类:随机存储器(RAM)、装有BIOS的ROM、接口卡上的RAM; BIOS:主板、网卡、显卡、接口卡上都有的软件系统,通过这个可以对该硬件设备进行最基本的输入输出, 内存地址空间:最终运行程序的是CPU,所以用汇编编程的时候,必须要从CPU的角度来考虑问题; 计算机内部都是从0开始的; 任何的指令、命令、数据,在计算机中都为二进制; 2、CPU的内部工作原理 CPU由运算器、控制器、寄存器等组成; 8086CPU有14个寄存器:AX、BX

语言处理程序

房东的猫 提交于 2020-02-22 09:09:31
什么是语言处理程序? 它是一类系统软件的总称。还是不懂?那好吧,我们把它给拆了? 拆完后 =“ 语言 ”+“ 处理 ”+“ 程序 ” 首先。是什么类型的语言呢?是编程语言;处理即操作。程序 就不用说了吧。 这里事实上是给大家买了一个关子。简单的说语言处理程序就是:用来对编程语言进行处理的一类程序。 那么为什么要对编程语言进行操作呢?这不得不说到编程语言的 发展 了。 一、编程语言的发展 机器语言 :一開始,人类和计算机打交道用的是机器指令(机器语言),我们都知道机器指令太“简单”了,简单到仅仅剩下“ 0 ”和“ 1 ”。 汇编语言 :为了符合人类的编程思维习惯,我们開始用一些简单的。常识符号来当作指令进行编程,即汇编语言,汇编语言包括:指令语句,伪指令语句,和宏指令语句。 指令和伪指令的差别:指令进过解释后能够直接变成机器指令,而伪指令即为指令语句的运行提供服务,比如分配内存空间等操作。宏指令即批处理指令。 高级语言 :为了是编程变得简单,符合人们的理解习惯。接着发展到了第三个大阶段。高级语言阶段。这时候的编程语言层出不穷, c,c++ 。 java 等被我们熟知了。 高级语言极大的方便了编程。可是机器还是比較“简单”的,它识别不了复杂的人类社会,所以高级语言和机器之间的沟通这个时候须要有人来解决——语言处理程序。 语言处理程序的主要目的就是将汇编语言和高级编程语言翻译成机器语言