一、冯.诺依曼计算机的五大组成部分
1.运算器:(ALU)进行算数运算、逻辑运算
2.控制器:指挥程序运行, 取出指令来执行
3.存储器:分为主存和辅存,存数据、存指令
4.输入设备
5.输出设备
冯的计算机主要就是采用“存储程序”的工作方式运行
二、存储器
注:寄存器和存储器的区别以及两者的概念
a. 寄存器是存储器的一种,是集合和子集的关系。
b.寄存器存在于cpu,数量很少, 但是速度很快
c.计算机做运算时, 必须将数据读入寄存器才能运算。
PC:程序计数器
IR:指令寄存器
MAR:存储器地址寄存器
MDR:存储器数据寄存器
GPRs:通用寄存器组(由若干通用寄存器组成,早期就是累加器)
三、指令和数据
1.指令
a.指令中需给出的信息:
操作性质(操作码)
存储地址
b.机器指令用二进制,汇编指令用符号
注意: 存储地址的描述与操作数的数据结构有关
四、计算机系统抽象层
1.汇编语言
a.汇编语言程序由汇编指令构成
b.汇编指令是用助记符和标号来表示的指令(与机器指令一一对应)
2.程序执行的条件:
a.取决于算法、程序编写
b.取决去语言处理系统、操作系统、ISA(指令集体系结构)、微体系结构
语言处理系统包括:各种语言处理程序(如编译、汇编、链接)、运行时系统(如库函数,调试、优化等功能)
操作系统:向下管理着硬件资源,向上供应用程序调用并管理、调度应用程序。
指令集体系结构(ISA) :
a.规定了如何使用硬件
b.没有它软件无法使用计算机硬件。
c.ISA是计算机组成的抽象
d.几乎都划分到通用寄存器体系结构中,主要包括
(1)寄存器-存储器ISA,在指令中访问存储器 (2)载入-存储ISA,通过载入或者存储指令来访问寄存器
五、进制与二进制
1.机器级数据分为数值数据和非数值数据
数值数据:无符号整数、带符号整数、浮点数(实数)
非数值数据:逻辑树(包括位串)、西文字符和汉字
2.计算机内部所有信息都用二进制进行编码 原因: a.制造稳态物理器件容易
b.二进制编码、计数、运算规则简单
c.正好与逻辑命题真/假对应,便于逻辑运算
d.可以使用逻辑电路实现算术运算
3.真值和机器数(很重要)
机器数 :用0/1编码计算机内部的0/1序列 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。 那么,这里的 00000011 和 10000011 就是机器数
真值 :真正的值,即:现实中带正负号的数 例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1 先将机器数的0/1符号转换为正负号,然后再带入机器数剩下的值。
通常后缀"B" 表示二进制数,在0/1序列后加B
4.十进制与二进制之间的转换
5.计算机中小数点的表示
计算机只能通过 约定小数点的位置 来表示 a.小数点位置约定在固定位置的数称为定点数 b.小数点位置约定为可浮动的数称为浮点数
定点小数用来表示浮点数的尾数部分 定点整数用来表示整数,分带符号整数和无符号整数。
六、原码和移码的表示
1.原码:正用0表示,负用1表示,其余部分用二进制表示。 符号位加上真值的绝对值 [+1]原 = 0000 0001 [-1]原 = 1000 0001
注意:
a.0的表示不唯一,不利于编程
b.加减运算方式不统一
c.需额外对符号位进行处理,故不利于硬件设计
d,特别当a<b时,实现a-b比较困难
2.反码 正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
3.补码 正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
结论1:也可以说负数的补码等于模减该负数的绝对值。 结论2:对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数的负数的补码来代替。
七、程序的表示、转换与链接
1.无符号整数(unsigned)和带符号整数 整数类型分为:无符号整数和带符号整数
1.1无符号整数(没有符号位) LSB:最低有效位 MSB:最高有效位 两者不是固定的,是相对的,人为可控的
一般用于地址运算、编号表示等。
无符号数=无符号整数
1.2带符号整数(0为正/1为负)
50年代以来,所有计算机都用补码来表示带符号整数 原因: 加减运算统一 表示唯一,方便使用 比原码多表示一个最小负数
2.c语言程序中的整数
a.常在一个数后面加一个u或者U表示无符号数 b.若同时有无符号和带符号整数,则c编译器将带符号整数强制转换为无符号数。 c.比较时,如果无符号数和带符号整数相比,则 按照无符号数相比 。
3.浮点数的表示范围
a.阶就是指数 b.只要对尾数和指数分别编码,就可表示一个浮点数(即实数) 1.101*2(-10)【二进制】 尾数是1.101 基为2 阶和指数是-10 c.规格化,小数点前,第一位总是1。(不明显表示出来,实际上代表一位的尾数) 三十二位时: 0. 1 1...1*2(11...1)=【1-2(-24)】*2(127)
d.偏置常数,帮助增大浮点数的精度。
e.阶码=偏置常数+阶
指数是阶或称阶码
阶码的值=阶码-127
小数部分是尾数
二进制浮点数的规格化方法: 通过调整小数点的阶码使得该数的有效值在1和2之间,既 二进制浮点数的整数部分为1, 例如:0.8125 = 0.1101(2) = 1.101*2(-1)
4.非数值数据的编码表示
西文字符没有输入码(有内码)
至少需要2个字节才能表示一个汉字内码(由汉字的总数决定!2(16)=65536)
图形、图像、音频、视频等信息在机器内部也用0/1表示
5.数据宽度和存储容量的单位 a.一个字节是8位(字节就是byte)
b.字长:顶点数据通路的宽度
字长等于cpu内部总线的宽度、运算器的位数、通用寄存器的宽度(这些部件的宽度都是一样的)
c.字:表示被处信息的单位,用来度量数据类型的宽度。
6.数据存储时的字节排列
a.变量的存储地址是 最小的地址
b.多字节在存储单元中存放顺序为:大端方式/小端方式
大端方式:MSB所在的地址是数的地址
字节交换问题: 每个系统内部是一致的,但在系统间通讯时可能会发生问题。 因为顺序不同,需要进行顺序转换。