1.理解计算机系统:计算机的源码运算组成
2.原码二位乘法100为什么是加2x?
理解计算机系统:计算机的组成
组成原理学习方法(来自大学老师的总结):
一.计算机系统简介
1.1 计算机系统的组成
计算机系统由软件和硬件构成,图1-1为计算机系统的乘数基本组成。
1.2 计算机系统层次结构
操作系统是源码运算一种系统软件,它是乘数与计算机硬件直接打交道的人。我们通常说的源码运算操作系统工程师就会接触到底层硬件的驱动开发,就是乘数androidpptp源码让操作系统更好的控制各种硬件。
图1-2展示了计算机系统的源码运算基本层次结构,从这个图当中我们也可以看出一个程序是乘数如何编译运行的。
以C/C++程序为例子:
一个程序的源码运算核心执行流程为编译和汇编,编译就是乘数将特殊的语言例如C++编译为汇编器可以进行翻译的语言(test.s),而汇编器将这种语言汇编为机器语言(test.o)。源码运算
机器语言是乘数计算机可以直接执行的代码和语言,主要成分为0和1。源码运算
编译笼统上来说是乘数产生目标程序的过程(包括预处理、编译、源码运算汇编这些细节过程),云办公 oa 源码也就是从test.c到test.o就是广义的、非正式的编译过程。
1.3 语言分类
1.3.1 语言分级(笼统概念)
目前随着计算机科学水平不断提高,计算机语言已经发展出第四代、第五代甚至更高级的语言。
1.3.2 解释型/编译型语言
举LZ最喜欢的三种语言为栗子。
Scala语言的运行过程:
Scala语言是编译型语言,它的执行需要经过编译,但它是基于JVM平台逐条执行的。也就是每执行一条源码指令就编译成字节码程序在JVM平台上运行。
Python语言的运行过程:
Python语言是解释型语言,需要带着一个解释器。例如:a=1 先翻译成中间代码,解释器解读并执行。因为我们说源程序到产出机器码的asp源码启动文件过程才笼统叫做编译,因此这种源程序到中间代码的过程只能描述为“翻译”。
Java语言的运行过程:
Java也是一门编译型的语言。源程序文件经过编译之后形成字节码文件(.class),这种字节码文件还不能在操作系统上直接运行,还需要在JVM(Java Virtual Mechine)平台上运行。
二.计算机的基本组成
冯诺依曼冯大佬,被誉为“计算机之父”,世纪最重要的数学家之一。兴趣爱好为博弈论、计算机、生化武器、原子弹等。
该冯姓男子创建了一个广为流传、并被“取其精华、弃其糟粕”的rk3399源码计算机结构-----冯诺依曼计算机。
取其精华:
1/采用存储程序的思路进行工作:将程序按照地址顺序放在内存储器中,运行时,按地址顺序取出存放在内存储器中的指令,并分析执行,当遇到跳转指令时,跳转(cs:ip)到指定地址,再按次序执行。
优点:计算任务能够按序列批量执行。
2/指令和数据都使用二进制表示:物理信号的逻辑就是基于0、1进行传输的。别看我们现在看它很容易,但是把你放到过去,你未必能想到。
3/指令和数据以同等地位存储于存储器,可按地址寻访,其中指令由操作码和地址码组成。草根吧源码论坛
弃其糟粕:
1.使用运算器为中心:什么都要走运算器的流程?我就打印一个Pi运算器都要走半天?那我核心的计算任务就不用干了。
冯诺依曼计算机提出了计算机在硬件组成上的五大部件:运算器、控制器、存储器、输入设备、输出设备。
三.从计算机处理问题的过程看五大部件
STEP1: 取指令
机器启动后,将PC中存储的下一条指令的地址送入MAR,并命令存储器做读操作,存储器读出对应的指令并存入MDR。然后送入IR。
[1] PC -> MAR [2] [MAR] -> MDR [3] MDR -> IR
STEP2:分析指令
IR中的指令送入CU进行分析。
[4] OP(IR) -> CU
STEP3:执行指令
例如中分析出是取数指令,于是将送入MDR进行一个取数流程(将数据的地址送入MAR,并命令存储器读数据,将数据存储到MDR)。最后将数取到运算器的ACC中进行下一步操作,PC寄存器加一。
[5] Ad(IR) -> MAR [6] [MAR] -> MDR [7] MDR -> ACC [8] (PC) + 1 -> PC
3.1 主存储器的构成
主存的工作方式就是按存储单元的地址号存取存储字。这个流程称为地址访问存储器简称访存。为了能够实现访存,主存中还必须配置两个寄存器MAR、MDR:
早期的计算机,存储字长=指令字长=数据字长,一次访存可以取出一条数据或者指令。
如今计算机需要适应高精度高内存利用效率的存储,存储字长、指令字长、数据字长可以各不相同。但它们都是字节的整数倍。
3.2 运算器运算流程
以乘法为例子: 我们要将乘数和被乘数分别放到MQ和X寄存器当中,最终计算结果是乘积高位保存到ACC,低位保存到MQ。
假设计算机读到了指令乘 M,其详细步骤为:
3.3 控制器的基本组成
控制器是计算机的神经中枢,由它指挥各部件自动、协调地工作。
3.4 I/O设备
CPU和主存构成了主机,除主机外的大部分硬件设备都可以称为I/O设备或者外设。
详细的外设知识点可以参照:
四.硬件主要技术指标
4.1 机器字长
机器字长越长,计算机计算精度越高,针对高精度计算的运算次数越少,运算速度就越快。
常见的机器字长有位、位的。
4.2 运算速度
运算速度一般使用主频和MIPS来衡量。
1)MIPS - Million of Instruction Per Second 每秒执行多少百万条指令
2)主频。
主频:CPU在单位时间内发出的脉冲数。单位为MHz。 CPI(Cycle Per Instruction): 执行一条指令所需的时钟周期,也就是机器主频的倒数。
3)Flops
一般超算使用的是Flop/s也就是每秒执行多少次浮点数计算。
IBM的Summit尖峰的最大运算速度为每秒完成万亿次浮点运算(TFlops)。我国的“神威•太湖之光”峰值运算速度为每秒.9万亿次浮点运算(TFlops)。
4.3 存储容量
存储容量 = 存储单元个数 x 存储字长
假设MAR为位,MDR为位。则存储单元的个数是2^也就是个存储单元,存储字长为位,总的存储容量也就是2^ x = 2M 位。
参考
[1] 系统架构师教程.第四版 P-
[2] 计算机组成原理 唐朔飞 第二版 高教社
原码二位乘法为什么是加2x?
题主断章取义了,书上写:根据“”加2x*。这句话是有语境的,这里的,前面的是乘数的低位(最右),后面的0是标志位Cj。
什么是Cj呢?根据原码两位乘法的规则就能知道:
当乘数两位状态为时,需要加上3倍被乘数,这在计算机中不好直接实现。所以改成加上(4-1)倍被乘数。但这么规定后,两位乘数最大值只有,也就是3。所以增加一个标志位Cj,当Cj为1时,给两位乘数加上一个“1”。
运算时就可以看成:加上“乘数的两位+Cj”倍的被乘数。
再回到:根据“”加2x* 这句话
这里的实际上就是(+0),结果还是,所以加2x*。
而Cj何时为0何时为1,看书上原码两位乘的运算规则表就可以了