1、计算机系统=软件➕硬件
上层是下层的抽象,下层是上层的实现。底层为上层提供支撑环境。
2、计算机硬件和软件的接口:指令系统
3、软硬件界面:指令集体系结构(ISA)有时简称系统结构、体系结构,指令结构,甚至简称"架构"。
4、机器语言由指令代码构成,能被硬件直接执行。
5、ISA是一种规约,规定了如何使用硬件:
6、现代计算机系统层次:应用程序、语言处理系统、操作系统、指令集体系结构、计算机硬件
1、1945年,在共同讨论的基础上,冯诺依曼以"关于EDVAC的报告草案"为题,起草了长达101页的总结报告,发表了全新的"存储程序通用电子计算机方案"。
1946年第一台通用的电子计算机ENIAC诞生。
主要的逻辑元件(用来处理电信号的最小逻辑单元)为电子管。
设计"存储程序"计算机,被称为IAS计算机,为1951年完成,此计算机并不是第一台存储程序计算机,第一台是1949年由英国剑桥大学完成的EDSAC。
2、发展阶段:
3、摩尔定律
揭示了信息技术进步的速度。
集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,整体性能也将提升一倍。
4、冯诺依曼结构
(1)工作方式
采用"存储程序"的工作方式。此工作方式的基本思想是:必须事先编好程序,并将程序和原始数据送入存储器后才能执行程序;一旦程序被启动执行,计算机能在不需操作人员干预的情况下自动从存储器中逐条取出指令并执行指令。(关键词:存储,程序)
(2)构成
我们可以自然而然推断出以下:
抽象出来即为
早期,部件之间用分散方式相连;现在,大多用总线方式相连。
(3)主要思想
<1>计算机应由运算器、控制器、存储器、输出设备、输入设备五个基本部件组成。
<2>各基本部件的功能:
<3>内部以二进制表示指令和数据。每条指令由操作码(指出操作类型)和地址码(指出操作数的地址)两部分组成。由一串指令组成程序。
<4>采用"存储程序"工作方式。
1、中央处理器最基本最核心的路径:
现代计算机结构模型也逃不出冯诺依曼结构的框架。
所以也有存储器,存储器被划分成一个一个存储单元,并编上号。也有控制器。
也有ALU(算术逻辑部件),送进去的操作数可以是寄存器的操作数,也可以是存储器的操作数,运算的结果可以继续放到某个寄存器中,也可以通过总线输出到存储器。
寄存器的数据可以通过MDR送到存储器。存储器的数据也可以通过MDR送到寄存器。
标志信息(例如:结果是否为0(零标志ZF)、是否为负数(符号标志SF)等)存储在标志寄存器里面,然后送到控制器中影响后续指令的执行。
如果要执行一条指令,那么要把指令的地址事先送到专门的寄存器里面(PC:程序计数器),指令的地址要先送到MAR(主存的地址寄存器),然后通过总线送到存储器。操作数的地址也要送到MAR。
GPRs通用寄存器组,由若干个通用寄存器组成。
指令从MDR取过来,再送到控制器中执行。先要放到指令寄存器(IR)中。
大概的过程:cpu要从存储器中取指令,必须先把地址送给存储器,并把控制信号送到控制线上,告诉存储器要读某地方的信息,读出来的信息通过数据线送到MDR,指令送到指令寄存器,数据送到寄存器,再送到ALU进行运算。
2、计算机是如何工作的?
类似"存储程序"的工作方式
3、指令中需要给出的信息:
存储地址的描述与操作数的数据结构有关!
1、最早的程序开发用机器语言编写程序(0/1序列),并记录在纸带或卡片上。
缺点:若在中间指令前加入指令,则需重新计算地址码,重新打孔。不灵活,书写阅读困难!
2、用汇编语言开发程序。用符号表示跳转位置和变量位置。
用助记符表示操作码。标号表示位置。助记符表示寄存器。
优点:
缺点:人认识了,机器不认识了。
需将汇编语言转换为机器语言。用汇编程序转换。
e.g:有一条机器指令"1110 0110",其中操作码1110表示取数(load)操作,0110表示主存地址6。取数指令的功能是将指定主存地址中的数据取到0号寄存器,那么,机器指令"1110 0110"对应的汇编指令可以写为"load r0,6#",指令load是操作码助记符,r0表示0号寄存器,6#表示主存地址6。
CPU中所有微操作都由时钟信号进行定时,时钟信号的宽度为一个时钟周期。一条指令的执行时间包含一个或多个时钟周期。
3、进一步认识机器级语言。
机器语言和汇编语言都是面向机器结构的语言,统称为机器级语言。
总结:汇编语言比机器语言好,但还是麻烦!
4、用高级语言开发程序。
翻译程序:汇编、编译、解释
5、为什么要转换的
1、机器级数据分为两大类:
2、真值和机器数:
用一个下标表示数的基(或用后缀B--二进制、H--十六进制、O--八进制)十六进制还可以用前缀0x表示
1、二八十六进制数的相互转换
2、R进制数=>十进制数(按"权"展开)
3、十进制数=>R进制数(整数小数分别转换)
1、表示一个数值型数据要确定三个元素:
2、
(1)解决小数点问题
定点数:小数点位置约定在固定位置的数
浮点数:小数点位置约定为可浮动的数
任意一个浮点数都可以用一个定点小数和一个定点整数来表示
定点整数的表示分为:
(2)解决正负号问题
4种定点数编码表示方式:
(1)补码的特性 > 模运算(+和-的统一)
结论1:一个负数的补码等于模减该负数的绝对值
结论2:对于某一确定的模,某数-小于模的另一数,总可以用该数+另一数负数的补码来代替
结合起来
结论3:一个负数的补码等于对应正数补码的"各位取反,末位加一"
当相加的和超出了n位数可表示的范围,则称发生了溢出现象
结论4:同一个真值在机器中可能有不同的机器数
(2)补码的表示
正数:符号位为0,数值部分不变
负数:符号位为1,数值部分"各位取反,末位加1"
末位不加1是反码
变形(模4)补码:双符号,用于存放可溢出的中间结果
(3)如何求补码的真值
真值范围:-2^(N-1) to 2^(N-1)-1
符号为0,则为正数,数值部分相同
符号为1,则为负数,数值各位取反,末位加1
5、移码表示(主要用来表示浮点数的阶码)
(1) 移码表示是将每一个数值加上一个偏置常数
当编码位数为n时,偏置常数取2^(n-1)
移码和补码仅第一位不同
(2)为什么要用移码来表示指数(阶码)?
便于浮点数加减运算时候的对阶操作(比大小)
(1)无符号数机器中字的位排列顺序有两种方式:
高到低位多采用第一种
(2)为什么能表示的最大值>位数相同的带符号整数的最大值?
举个:8位无符号整数最大是255(1111 1111)
而8位带符号整数最大为127(0111 1111)
(3)如果指定位数,但此数不够位数时:
带符号整数:符号扩展
无符号数: 0扩展
(1)32位单精度格式:符号1位 阶码8位 尾数23位
64位双精度格式:符号1位 阶码11位 尾数52位
(2)浮点数的表示(IEEE754 浮点数标准)
小数点前总是1,故可隐含表示
SP规格化数阶码范围:0000 0001(-127) to 1111 1110(127) 全1全0表示特殊值
bias为127(single),1023(double)
转换公式:
尾数:规格化尾数最高位总是1,隐含表示,省1位
1+23bits(single) 1+52bits(double)
转换问题:
转换成十进制:
转换成二进制
(3)浮点数除0问题
在浮点运算中,一个有限数除以0,结果位正无穷大(负无穷大)
e.g:5.0/0=+无穷 -5.0/0=-无穷
(4)Not a Number 非数(NaN)
表示一个没有定义的数
e.g:sqrt(-4.0) = NaN
0/0 = NaN等
每个十进制数位至少有4位二进制表示。而4位二进制位可以组合成16种状态,去掉10种还有6种冗余的。
总结:
浮点数的精度:与尾数的位数和是否规格化有关
浮点数的范围:与阶码的位数和基的大小有关
比特(bit)是计算机中处理、存储、传输信息的最小单位
二进制信息的计量单位是字节(byte),也称"位组"
现代计算机中,存储器按字节编址
字长指定点运算数据通路的宽度(字长等于cpu内部定点运算部件的位数、通用寄存器的宽度等)
而字表示被处理信息的范围,用来度量数据类型的宽度
e.g:在IA-32中字有16位,字长有32位
大端方式:MSB所在的地址是数的地址,从数据的最高有效字节开始存放
小端方式:LSB所在的地址是数的地址,从数据的最低有效字节开始存放