计算机组成原理408

提示:有什么问题欢迎大家指出

目录

  • 基础
  • 一、CPU
  • 二、主存储器
  • 三.进制+码
    • 校验码
    • 补原码的操作
  • 指令系统
  • 中央处理器
  • 总线
  • IO


基础

通过电信号传递二进制0/1,低电平为0(低电压)
金属针脚就是用来接受电信号的,一个针脚接受一个二进制位
主板上的印刷电路(一条一条的线)是用来导电的(传递电信号)
一位=1b B=字节=8位(大多数情况)
硬件发展:电子管-晶体管-中小规模集成电路-大规模,超大规模集成电路
翻译程序有两种:解释程序:即一条一条代码依次翻译和执行,如一些脚本语言等等,不会生成目标程序。编译程序:整个代码一起翻译和执行,一个程序只翻译一次,如c,Java等等
汇编:把汇编语言源程序转变为机器语言程序
指令和数据用二进制表示 指令由操作码和地址码组成
吞吐量:指系统在单位时间内处理请求的数量
基准程序=跑分软件 按字节编码=每个地址对应1个字节
完整的计算机系统应包括配套的硬件设备和软件系统
冯·诺依曼机中CPU 区分它们是指令还是数据的依据是取数还是取指令是在指令周期的不同阶段,
传统冯·诺依曼机以存储器为中心,程序的功能都是通过中央处理器执行指令,数据都在指令中直接给出

一、CPU

CPU=运算器+控制器 cpu+存储器(主存)=主机(和日常主机不同)CPU中有地址寄存器但运算器和控制器中没有地址寄存器
运算器:由ACC(累加器,用于存储操作数或运算结果),MQ(乘商寄存器,用于存放操作数或运行结果),ALU(核心,通过复杂的电路实现算术运算,逻辑运算),X(通用操作数,用于存储操作数)四个部分构成
控制器:包括CU(核心部件,分析指令,发送控制信号),IR(指令寄存器,存放当前执行的指令,PC(存放下一条指令,自动加一))
完成一条指令的步骤:1.PC-MAR一M→MDR一IR
取指令,根据PC取指令到IR。将PC的内容送MAR,MAR中的内容直接送地址线同时控制器将读信号送读/写信号线,主存根据地址线上的地址和读信号,从指定存储单元读出指令,送到数据线上,MDR从数据线接收指令信息,并传送到IR中。
2,OP(IR)-→CU
分析指令: 指令译码并送出控制信号。控制器根据R中指令的操作码,生成相应的控制信号,送到不同的执行部件。在本例中,R中是取数指令,因此读控制信号被送到总线的控制线上。
3,Ad(IR)一MAR一M一MDR—ACC
执行指令:取数操作。将IR中指令的地址码送 MAR,MAR中的内容送地址线,同时控制器将读信号送读/写信号线,从主存指定存储单元读出操作数,并通过数据线送至 MDR,再传送到ACC中。
4.最后(PC)+1——>PC (加个括号指PC中的内容,一般别省略)
CPU执行时间(执行整个程序所需要的时间),t=CPIna (CPIn指执行一个程序的总消耗,1/a是cpu每秒能够完成的消耗,例CPIn=500,cpu主频=1000,则t=0.5秒,每秒能够完成1000,所以t=0.5)
CPI是执行一条指令所需的时钟周期数(一般用平均数,理解为执行一条指令所需的时间,每个计算机执行同一条指令的CPI不同),n是这个程序有n个指令,a是CPU的时钟周期(时钟周期和CPU主频(时钟频率)是互为倒数,时钟周期可以理解为时钟的周期)
IPS:每秒执行多少条指令=主频/平均CPI.。平均指令周期为IPS的倒数
(在这些名词缩写前面加上K,M,G,T表示规模,K=千,M=百万,后面依次1000)
计算机的工作过程:例:y=a
b+c
首先存储器中会存储一系列指令用于执行这串代码,还会存储一些数据(如a=2,b=3等等)这些指令按地址存储在存储单元中,这些指令分为操作码和地址码
1.PC=0,并指向第0条指令(地址为0的指令,指令内容是取a到ACC)(PC=1)
2.PC将这条指令的地址传给MAR(MAR=0)
3.存储体通过MAR上的地址找到这条指令(地址为0的数据),并把数据给MDR
4.CPU中的IR从MDR获取数据,并把数据(指令)中的操作码给CU,CU经过分析得知这是取数(从存储器中读取数据)指令(这一步见存储器作用1)
5.将读取到的数据给ACC(a=2)
下一条指令的执行,地址是1,内容是乘b得结果ab,存于ACC中
运行依然是先获取指令,分析指令,即1234步,然后是下面的123步,其他操作类似
1.将获得的数据b存于MQ中,并将ACC中的数据给X,
2.CU通过控制线通知ALU进行乘法运算
3.ALU将X和MQ中的数进行乘法操作,并将结果放于ACC中,
–最后程序的结束是由操作系统完成的,
门电路:与门相当于乘法,或门相当于加法,运算时符合四则运算规则
用门电路实现加法运算:

二、主存储器

存储器分为主存储器(内存)和辅助存储器(也称外存)。CPU 能够直接访问的存储器是主存储器。辅助存储器用于帮助主存储器记忆更多的信息,辅助存储器中的信息必须调入主存后,才能为CPU所访问。
主存储器:包括存储体(存储数据)和MAR(地址寄存器=存储器中存储单元的最大的个数,MAR=32,则存储器的最大容量为2^32* 8(MDR)),MDR(数据寄存器=存储单元的大小,MDR=8)( 现在MAR和MDR都会与CPU放在一起 )
与CPU作用1.CPU从存储器拿(读取)数据。首先CPU将数据的存储地址给MAR,MAR将地址给存储体,存储体通过地址找到数据将数据给MDR,然后CPU从MDR处拿数据
与CPU作用2:CPU写入数据到存储器,首先CPU将数据要写入的地址给MAR,将数据给MDR,存储器通过MAR.MDR存储数据
数据在存储体中的存储方式:数据在存储体体中按地址顺序存储,每一个地址指向一个存储单元
存储单元:存放一串二进制数据(由若干个存储元构成)
存储字=存储单元:存储单元中的一串二进制代码我们称为存储字(存储字)
存储元:输入高低电压以产生一位二进制0/1的电子元件,
存储字长:存储字的长度(8的倍数,字长的长度都是字节的整数倍,半字长指令长度=机器字长的一半
存储体:由若干个存储单元构成
机器字长=ALU=X:CPU一次能处理的二进制数据的位数
指令字长:一个指令字包含二进制代码的位数,一般取存储字长的整数倍
地址线:大小等于存储体中存储单元的数量(MAR)
数据线:大小等于MDR的大小
数据通路带宽:指数据总线一次所能并行传送信息的位数。
存储器的总容量=MARMDR(单位 位)
存储速度:数据传输率(主存带宽)=数据的宽度/存储周期
存储周期=存取时间(一次)+恢复时间(一次)
存储器所用的芯片RAM+ROM
随机储存器的读写时间和物理位置无关,顺序储存器和物理位置有关(磁带),直接存储器综合前两点(磁盘,光盘)。后两又称串行存储器,包括等。前三种是按地址访问,相联存储器(快表)是按内容访问
半导体随机存取存储器(需要一直通电,断电则内容丢失,易失性存储器(RAM都是易失性))
SRAM(静态随机存储器) 常用作Cache 触发器构成,反之
DRAM(动态随机存储器) 常作主存,电容构成,需刷新,慢,发热小,集成度高,价格低,是破坏性
刷新周期一般为2ms,读写周期一般为0.5us,以行为单位刷新
例:假设DRAM的内部排列成128
128的形式(数据以行列模式存储(二维数))
异步刷新:2ms内每行刷新一次即可,一共128行,则2ms刷新128次,则每2ms/128=15.6us刷新一次,则每15.6有0.5us的死时间(用于读写的时间)
集中刷新:128次刷新一起完成,有死时间/死区 分散刷新:2/128刷新一次,综合前两种
只读存储器ROM(U盘,固态硬盘),非易失性,但有些rom是可以写的
金属引脚的数量=地址线(多条)+数据线(多条)+片选线(1条)+读写控制线(可能2条)
主存容量扩展线选法:一条线控制一个芯片,(假设1为给芯片通电,0为给芯片断电)
译码片选法:一条线控制两个芯片(假设1为给芯片1通电,0为给芯片2通电)
(65)多体并行存储器:多个简单存储体并行连接而成
高位交叉编址模式:即用高位区别多个存储体(例前两位用于区别存储体则可区别4个存储器)
在连续访问地址时(即连续的一串地址),由于高位交叉编址模式的高两位用于区分存储器,则每一列地址是连续的(即一块存储体中的地址是连续的,只能先访问完一块存储体才能访问第二块存储体,而在低位交叉编址模式中则可以在访问第一块存储体时过一小段时间(小于存储周期)访问第二块存储体
Cache(高速缓冲存储器):一小块速度非常快的内存,造价高,内存小,速度快,用于cpu和主存间的数据对接
命中率:CPU预访问的信息已经在Cache中的比率H
主存的平均访问时间=Ht+(1-H)(t+T) (t是访问一次Cache所需时间,T访问一次主存所需时间)
主存将数据发往Cache可以一整块一整块数据的发,而与cpu对接时一次只能发一个数据(即内存间的数据流通可以是一整块,而与cpu只能一个一个)
Cache与主存的地址映射:组相连映射:将Cache分为几个组,组内随意放(假设有8个行,则分为4个组,用两位标记组号,一位判断是否被使用)
直接映射:主存块号模Cache的总组数得到主存块在Cache中的位置
全相连映射:随便放 (标记位是Cache中用于区分是主存中的哪一个块(块号),若主存共有16个块,则标记位需要4位。CPU在访问时先将主存块号与Cache中的标记位一一比对,若相等且有效位为1则Cache命中。若Cache共有8组,则主存块号的末尾3位能直接反映其在Cache中的位置,因为主存块号是按顺序编号的,则这三位可以不用存储在Cache中)
在主存中也取两位分组,假设有一行地址为00,则在00组内随意放(编号为00的有两个行)
Cache中满了的替换:替换掉不常用的数据
近期最少使用算法LRU:1.命中时,所命中的行的计数器清零,比其低的计数器加 1,其余不变
2.末命中且还有空雨行时,新装入的行的计数器置 0,其余全加 1
3.未命中且无空闲行时,计数值为 3 的行的信息块被淘汰,新装行的块的计数器置 0,其余全加 1
最不经常使用算法:
Cache工作原理:
虚拟存储器:将一个程序(进程)分为多个大小相等的页(数据块。页大小和主存块一样)
页表包括逻辑页号和对应的主存块号,页表在主存中
快表,用于存储经常访问的页号

三.进制+码

真值就是十进制表示的值,带±号的 没有特别说明,符号位不带入计算
C语言的数据在内存中为补码形式
进制间转换:后缀H,B,D分别表示16,2,10进制
基数:r进制的基数为r,十进制之所以叫十进制是因为每一个数的取值范围为0~9十个数,且逢十进一
则其他进制转为十进制为 abcd.e=arrr+brr+cr+d+e1/r 各进制的计算用逢r进一的方法
二进制转为其他进制,因为三个二进制数有最多8种可能,则每3位二进制数进行一组运算,不足三位在前面补0(小数点后面补0),例1111=17(八进制)
其他进制转为二进制,是上面的逆运算,例17 1=001 7=111,所以17=1111(八进制)
十进制转为其他进制,例75/r,一直取余即可(整数位),小数位则0.3
r,一直取整即可,例0.32=0.6(取0)0.62=1.2(取1)0.22=0.4(取0)0.42=0.8(取0)0.82=1.6(取1)则到此为止(出现重复的数)则0.3用二进制表示就是0.01001
BCD码:(使用二进制编码的十进制数)用四位二进制表示一位十进制,分别有:
8421码:有权码,对于每一位十进制数来说,四位二进制来表示0 ~ 9.对于四位二进制来说,每一位二进制数代表的值是8421。所以0000 ~ 1001分别对应0 ~ 9。在计算机做加法运算时,若加法的结果在10到15之间,则结果不正确,需要再加6(0110)并高位补0修正(例0101+1000=1101,但1101不在8421码里面,所以1101+0110=10011才是正确结果,最后用8421码表示为0001 0011)
余3码:(无权码,每一位二进制数代表的值是变的)即在8421码的基础上加3表示0 ~ 9位数
0011 ~1100表示十进制0 ~ 9
2421码:(有权码,四位二进制每一位的权值是2421)0 ~ 4以0开头,5~9以1开头,因为防止一个数有多个可能,比如6可以等于0111或1100
字符与字符串的存储:(GB 80)中文字符占两个字节(两个英文),中文按一种类似坐标的方式存储,每个中文字符由两个数字表示.例如一张94
94的表存储中文字符,汉族”啊“可能在(1,1)位置
在处理中英文时可能会出现错误,比如计算机在识别中文时可能会将中文识别成英文,英文ASCII码的范围是0 ~ 127,这个范围是包含0 ~ 93的。则在处理“啊”这个中文时我们会先在(1,1)左右都+32(20H),将范围变为32 ~ 125(ASCII码中0~32是控制通信字符)(1,1)叫区位码,左右都+32(20H)后叫国标码,左右都再加80H(128)叫汉字内码(实际使用的)
汉字用汉字字形码表示,即一个汉字在一块充满像素的区域内,占到的像素则表示1,不占到的为0
大端模式:正常存储模式,从左到右顺序存储(左为高位)
小端模式:从右到左逆序存储(便于机器)

校验码

在传送数据时可能会出现一些错误,可能会使某个1变为0,0变为1,校验码可以检测错误并且修改
码距:各合法码字间的最小距离(两个合法码字间不同位的个数)101和001的距离为1
码字:例A的编码为00,00就是一个码字,在一个编码方案中,不存在的编码为不合法码字
奇偶校验码:只具有检测错误的能力,码距为2
在编码的首部或者尾部添加一个校验位(一位),在添加一位后,编码中的1的个数位奇数为奇校验码
这样,在出现错误时(即某一位改变时),1的个数会变,就能根据奇偶性判断出错误
实现:硬件上可以通过异或运算或者取模运算得知需要在首部加0还是1,即从头开始每一位数与他下一位数进行异或运算,例1001=0,则需要加一位0。判断是否出错则只需要再进行一次异或运算,结果是1则说明数据传送出错(异或运算,有一个1则结果为1,全1也为0)
海明校验码:以下是从大到小(方向左-右),1位纠错,2位检测,无法区分是一个位错还是两个位错。2^k>=k+n+1 (k是需要的校验码的个数,n是信息位的个数。用这个公式可以算出需要多少位校验码
海明码=信息位+校验码 校验码必须放在2^(i-1)位置上(i是第i个校验码,其他位按顺序填入即可,例:1011需要3个校验位,则应该是101a1bc,abc为三个校验位的代号)
对于校验码的值,取信息位位于海明码中的位置(在第几位),生成二进制数(即某信息位在第3个位置,则生成的二进制数为011,k个位)
把他们按顺序从上-下排列(按顺序取数),取所有二进制的最后一位数为1的生成一组(最后一位数为1的信息位组成一组),然后进行异或运算,结果便是一个校验码的值,然后取倒数第二位(偶校验)
纠错:对每个组进行一次异或运算(偶校验),出现1则出错,将异或运算得到的结果取十进制则得出错的位置(在海明码首位加一个全校验位,对整体进行偶校验,当出错时,如果全体偶校验成功则为两个位出错,失败1位出错)计算机组成原理408_第1张图片
循环冗余校验码(CRC)纠错能力很差,检测用的多.适用于数据量大的检测
一般题目会给一个多项式以生成被除数,例G(x)=x^ 3 + x^ 2+1 这个式子
=1x^ 3+1x^ 2+0x ^1+1 x ^0 于是被除数就是1101(约定一个除数,使原数据除这个数结果为0,则若传过来的数据除这个数不是0,则说明传输出现错误(求得的余数不是出错的位数)
这个最高次幂3就是要补的校验码的个数,然后在信息码(原数据)后面加3个0(校验码)
然后进行模2除操作(1101) 假设信息码为101001 则101001000/1101
101001000(取1(首位)与1101相乘)
1101 (得,取首位1作为结果的首位数)
111 (后三位进行异或运算)
1110 (后补一位,与除法类似,取首位1作为结果的第二位数)
1101 (取1(首位)与1101相乘)
0111 (后三位进行异或运算,并后补一位)
0000 (取0(高位),乘1101得)
余数是001(校验位,比被除数少一位) 结果是1101001最终的CRC码是结果+校验位

补原码的操作

取模运算:x = qm +r,0 ≤r 定点数:小数点位置固定不变的(通常的写法)(c语言定点整数用补码存储)
浮点数指科学计数法表示的数。定点小数指纯小数,小数点隐含,例1001=11=-0.5
无符号数:只表示整型量,无±
原码:二进制表示的值,用符号位表示正负,即在最前面加一个表示符号的位,1表示-,0表示+
如指明长度,则补0,如5位,3D=0 0101
反码:如符号位为0,则反码与原码相同。如为1,则反码与原码相反(0-1)
补码:如符号位为0,则补码与原码相同(|-y|补等于将-y先变成反码再变成补码)如为1,则补码=反码值加1
定点整数补码:10000000表示-2 ^ 7,若机器字长n+1位,补码整数的表示范围:-2^ n ≤x≤2^n-1 (比原码多表示一个—2 ^n )
定点小数补码: 1.0000000表示-1,若机器字长n+1位,补码小数的表示范围:-1 ≤x≤1-2^(-n)(比原码多表示一个-1 )
补码—>原码(无说明则操作不包含符号位)方法和原码到补码一样,全部取反,+1即可
作用:将减法用加法表示
只要将负数用其补码(符号位带入转补码计算)代替然后直接相加即可,假如是8位,而结果是9位,则舍去第一位(对2的8次方求模)
移码:将补码符号位取反即可 用于整数比大小
移位运算:对于原码:左移相当乘2,右移相当于除2,移位时补0,但如果将1移出则会出现误差
反码,对于正数反码与原码相同,对于负数反码在移位时要补1
补码:对于正数反码与原码相同,对于负数右移补1,左移补0
循环移位:即将移出的一位补到空位上(带进位位的)(首位移到尾位,循环)
逻辑移位:带符号位移位,移出补0
加减运算:设机器字长为8位,加减运算于十进制加法运算(手算)方式相同(a+b=a+(-b))
例:a=15,b=-24 则a原=00001111 b原=10011000
【A+B】补=【A】补+【B】补 【A-B】补=【A】补+【-B】补(【B】补连同符号位一起取反加1)
补分别为:00001111 11101000 则a+b=11110111(原码=10001001=-9)
-b=00011000(对b补同符号位一起取反,+1)
溢出判断:当正+正(上溢)时和负加负(下溢)时会出现溢出(结果大于8位数能表示的区域)
1:v={a&&b&&(!c)}||{(!a)&&(!b)&&c} v=0则无溢出 v=1则溢出
a为+数的符号位,b为被加数的符号位,c为结果的符号位(对于上面的例子a=0,b=1,c=1)
2:(模2补码)用一个符号位判断溢出,a=第一位,b=溢出位(即向更高位进的一位) (结果,上例中a=0,b=0) b=1,a=0下溢,b=0,a=1上溢
3.(模4补码)用两个符号位,01上溢,10下溢(一般只有一个符号位)
不会增加内存空间,相当于只用一个符号位,因为在运算之前会复制一个符号位
定点运算器中,无论是双符号位还是单符号位都必须有溢出判断电路,一般用异或门实现
符号扩展:正数:在符号位后+0即可,负数:原码在符号位后+0即可,
补码表示负数的符号扩展方法:原有形式的符号位移动到新形式的符号位上,新表示形式的所有附加位都用1(对于整数)或0(对于小数)进行填充(前面加1即可?)。反码表示负数的符号扩展方法:原有形式的符号位移动到新形式的符号位上,新表示形式的所有附加位都用1进行填充。
原码的乘除:手算乘法和十进制算法一样,那么在运算器中是如何实现乘法的呢?
在运算器中,被乘数存储在X(01101)中,乘数存储在MQ(01011)中,乘积存储在ACC中,例0.10110.1101 乘除再看书
1.ACC一开始是0,若MQ的最低位为1,则ACC=ACC+X(相当于ACC=0+1
0.1101,相当于计算0.00010.1101,然后下一步应该是0.0010.1101(进一位)
2.则ACC和MQ中的数作为一个连通的整体右移(逻辑右移)一位(高位补0),移出的舍弃(移出的是已经计算过的数)结果是ACC=00110,MQ=10101。此时MQ的最低位1,则进行一次加法ACC=ACC+X=00110+101101 数值位有4位,则重复操作4次即可
除法:恢复余数法(如果x必须小于y,不然结果大于1)
ACC在这里存储被除数或余数,MQ存储商(默认为00000,上0则最后一位为0,上1则最后一位为1),X存储除数
设x=0.1011,y=0.1101,求x/y 则{-|y|}补=1.0011(x-y=x+(-y))
则初始ACC等于01011,X等于01101,MQ等于00000
1.由于计算机不会比大小,则只能默认上1,则ACC=ACC-X=11110(为负)
这时候计算机知道错了,则ACC=ACC(11110)+X=01011(恢复为初始值=上0)
2.逻辑左移(错位) 3.重复12,4次
不恢复余数法(加减交替法)
若ACC为负,则上0,然后,逻辑左移,再让ACC=ACC+X
若ACC为正,则上1,然后,逻辑左移,再让ACC=ACC-X
若最后一步ACC为负则ACC=ACC+X(恢复余数)
(手算)首先用x+{-|y|}补,若余数为负则商0,则余数左移并+|y|补
若为正则商1,然后余数左移并+{-|y|}补,重复n次
补码的乘除:乘法:在MQ的最后增加一个辅助位(a),乘数的符号位参与运算
规则:a-b(MQ中除辅助位的最后一位)=1,则ACC+x补
=0,则ACC+0, =-1则ACC=(-x)补
例:设机器字长为5位(4个数值位),x=-0.1101,y=+0.1011
则x补=11.0011 (-x)补=00.1101 y补=0.1011
每一次后进行算数右移(符号位不动,逻辑右移符号位动)(就是以ACC和MQ为整体右移一位)
共循环4次
除法:加减交替法 符号位参与运算,采用双符号位
x=-0.1101,y=+0.1011–>>x补=11.1101,y补=00.1011(y/x)
1.首先被除数和除数同号,则被除数减去除数;异号则被除数加上除数。
2.余数和除数同号,商1,余数左移一位减去除数;余数和除数异号,商0,余数左移一位加上除数。
3.重复n次。最末尾恒商1 (x为除数,余数是每一步计算的结果)
c语言中的类型强制转换:如果是长的变短的(int(4字节)->short(2字节)),则直接截断高位保留低位,如果是短的变长的,如果是负数直接在前面加1,为正数加0。如果是有符号变无符号,带符号位计算即可
边界对齐:指以对齐的方式存储地址,假设存储字长为32位,则1个字为32位,半字为16位=2个字节
则一行可以存储1个字的大小,如为边界不对齐,则如果要存储1个字节和两个半字,则第一行会存储1个字节和一个半字(浪费空间)
如边界对齐则会存储1个字节和1个半字和1个半字的前一部分,然后下一行接着存储这个半字的后半部分(浪费时间,最后一个半字要读两次)
浮点数:N=r^E * M (r为进制数(也可取进制数的n次方比如22=4),E为阶码(1.12*109,则E=9),M为尾数,(1.12) 例:阶码,尾数均用补码表示,求a的值 a=0,01;1.1001
前面的0,01为阶码,第一个0是符号位,阶码的真值为1,尾数的原码为-0.0111
则a的真值=2^1 * (-0.0111)=-0.111(乘2的n次方相当于将小数点后移n位)
左规:假如a的真值为0.0111(小数点后第一个数为0)则可将这个0删除(左移一位)并使阶码-1
右规:假如a的真值为11.111(小数点前有超过1位数),则将小数点左移一位,并阶码+1
在补码表示尾数时,如果符号位为1,则小数点后的第一位数必须是0(规格化时,上面的左规或者右规
例:a的阶码和尾数分别为0.110;1.1110100,尾数用补码表示,则如何将a规格化?
将尾数小数点左移三位(保证小数点后第一位为0)低位补0,尾数则为=1.0100000,每左移一位,阶码1,所以阶码应该减3,则阶码=6-3=3=0.011
浮点数标准:IEEE 754(读作I tripe E)
移码的定义:移码=真值+偏置值(一般取2的n-1次方,n为机器字长)
在IEEE754中。偏置值取2^(n-1) -1,
在IEEE754中,一个浮点数由三部分表示,数符(表示正负),阶码和尾数
其中阶码用移码表示,尾数用原码表示,在用原码表示时,一般第一位数为1,则假如尾数用23尾数表示,我们一般指隐藏了第一位数1,则一共有24位数(1.后接23位数)
阶码中全1和全0用作特殊用途,当阶码全为0时,尾数不全为0,则表示非规格化小数。 尾数全为0时表示±0
当阶码全为1,尾数全为0时,表示无穷大,尾数不全为0时,表示"NaN"(Not a Number,进行0/0等非法运算时就会出现这个结果)
float为 1 8 23 double为 1 11 52
例:将-0.75转为IEEE754float格式,
-0.75=-0.11=-1.1
(2^-1)(规格化)
则数符=1,尾数部分=.10000000(隐藏1)
阶码的真值为-1 移码=-1+1111111(偏置值)=01111110(凑8位)
浮点数的加减例:x=-5/256,y=+59/1024 x-y=?(阶符取2位,阶码取3位,数符取2位,尾数取9位
x=-0.1012^-5= -0.1012 ^ -101 y=+0.111011*2 ^-100
用补码表示尾数和阶码:x补=11011,11.011000000 y补=11100,00.111011000(阶符取2位,阶码取3位,数符取2位,尾数取9位)
1.对阶:即使xy的阶码相等,首先求阶差,使x的阶码-y的阶码,结果为-1(负数),则x的阶码小于y,则使x的尾数的小数点左移一位,且阶码值加1(小阶向大阶看齐)
对阶后x=11100,11.101100000
2.尾数加减:x-y=x+[-y]补
3.规格化(左规或右规)(双符号位为10/01时需规格化为00/11)
4.舍入,尾数的长度是有限的,超过了则要舍/入,在规格化时,如果舍弃的是1,则尾数的值+1(可能会继续溢出,则继续右规),如果是0,则直接舍弃,方法2:直接将末尾的数恒置为1
5.判溢出:阶码位数也是有限的,上溢抛异常,下溢则视为0
强制类型转换,当尾数位数大于另一类型的位数时,转换无损失
char->int->long->double float->double 这些转换都无损失

指令系统

指令由一串二进制数据构成(格式)=操作码+地址码
指令通常由5部分构成,即操作数,左操作数,右操作数,以及结果和取的下一条指令(每部分都要用二进制位表示)
四地址指令:四地址指令指需要存取4条地址(后四条,操作数用某一串二进制表示即可(操作数是进行操作中的±*/符号))
三地址是四地址中除取的下一条指令的地址,二地址是三地址中除结果,一地址是二地址除右操作数
假设一套指令的各个地址的指令长度不变则称为定长
扩展操作码:即假设指令字长(用于表示整条指令的最大二进制位数)为32位,则可设计各个地址所用的二进制位数(将操作码用于区分地址)
假设令一套指令满足有15条三地址12条二地址62条一地址32条0地址
则用前四位(操作码)中的0~ 14表示三地址,则剩1111用于区分三地址,然后1111+四位(0~11)表示二进制
指令寻址方式指令寻指:下一条欲执行指令的指令地址
指令地址始终由程序计数器PC给出,顺序寻址即按地址排列顺序寻址,
跳跃寻址即从某一个地址跳跃到某一地址
数据寻址:确定本条指令的操作数地址,操作数为一些数据类型,有数字,逻辑数,字符,地址这些类型。数据寻址(一地址模式(只有一个地址(形式地址)),假设A为存储地址的地方,则一个地址就需要一个寻址特征,用于确定用哪种数据寻址方式)主要有一下几种形式:
立即寻址:A就是数据(共访存1次) 直接寻址:A是数据在主存中的地址(共访存两次)
间接寻址:A是一串地址,这个地址指向数据在主存中的地址(相当于调用过程)
寄存器直接寻址和寄存器间接寻址只是把主存换为寄存器而已,由于寄存器是在CPU中的一块内存,所以寄存器存取速度很快
隐含寻址:隐含在操作码中 偏移寻址:A中存储的地址是由数据的地址通过加法获得的
基址寻址:基址寄存器中的内容(BR)加上A中的地址就是最终数据在主存中的地址
BR是可变的,所以可用于编制浮动程序(地址浮动)
变址寻址:变址寄存器(IX)加上A中的地址就是最终数据在主存中的地址,即指令可以增减 相对寻址:相对于某一行指令进行操作 这三种方式经常混合使用
堆栈寻址:用多个寄存器(内存)形成一个栈,然后出栈入栈元素进行操作即可
指令集合:CISC 复杂指令集 主要用于笔记本台式机上(X86架构)
复杂,大,字长不固定,不限制可访存指令,通用寄存器数量较少,各种指令执行时间和使用频度相差大
RISC 精简指令集 主要用于手机平板等(ARM架构)与上面相反

中央处理器

PU的基本构成:ALU+CU(控制器)+中断系统+寄存器
指令周期:CPU取出一条指令并执行完这条指令所需要的全部时间,这个时间有一下几个部分组成
取址周期:1.(PC)->MAR PC是存储地址的,()表示取地址,这条语句的意思是取当前指令地址到MAR
2.1->R CU发送控制信号经控制总线到主存,(读信号)
3.M(MAR)->MDR 这里M指存储器,意思是取M中位于MAR表示的地址的数据到MDR
4.(MDR)->IR IR是指令寄存器
5.(PC)+1->PC
间址周期:间接取址1.Ad(IR)->MAR(Ad表示取的是地址) 2.1->R 3.M(MAR)->MDR
执行周期:执行指令
中断周期:程序中断所用的时间
CPU内部数据通路:数据在功能部件之间传送的路径,其基本结构有以下几种
1.单总线:多冲突,性能低
2.多总线:
3.专线:性能高,硬件量大
控制器的设计
硬布线: 繁琐,快,不规整,修改困难,应用场合RISC CPU 微程序反之
设计步骤:1.分析每个阶段的微操作序列 2.选择CPU的控制方式 3.安排微操作时序
4.电路设计(1)列出操作时间表 (2)写出微操作命令的最简表达式 (3)画出逻辑图
微程序:由微指令(包含多个微命令)序列组成,每一种指令对应一个微程序
程序:由指令序列组成
如果指令系统中有n条机器指令,CM中微程序的个数至少是n+1个
CPU可以不包含间址周期、中断周期的微程序段
微指令由操作控制字段和下地址构成
微指令格式:垂直型微指令
水平型微指令(程序短,速度快,微指令长)
字段直接编码方式:将微指令的控制字段分成若干“段”,互斥性微命令分在同一段内,相容性微命令分在不同段内。一般每个小段还要留出一个状态,速度慢
微程序控制单元设计步骤:1.分析每个阶段的微操作序列
2.写出对应机器指令的微操作命令及节拍安排 3.确定微指令格式 4.编写微指令码点
指令流水优化指令执行方式(指令重叠执行)硬件并行运行
吞吐率:单位时间流水线完成任务的数量
加速比:不使用流水线和使用流水线的时间比
效率:设备利用率
影响流水线的因素:
资源冲突(结构相关)由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
解决办法:1.后一相关指令暂停一周期2.资源重复配置:数据存储器+指令存储器
数据冲突(数据相关)存在必须等前一条指令执行完才能执行后一条指令的情况,
解决办法:1.把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行。可分为硬件阻塞(stall)和软件插入“NOP”两种方法。
控制冲突(控制相关)当流水线遇到转移指令和其他改变PC值的指令而造成断流时
解决办法:1.转移指令分支预测。简单预测((永远猜ture或false)、动态预测(根据历史情况动态调整)
2.预取转移成功和不成功两个控制流方向上的目标指令
3.加快和提前形成条件码 4.提高转移方向的猜准率
五段式指令流水线
运算类指令:IF:根据PC从指令Cache取指令至IF段的锁存器
ID:取出操作数至ID段锁存器
EX:运算,将结果存入EX段锁存器M:空段
WB:将运算结果写回指定寄存器
LOAD指令:IF:根据PC从指令Cache取指令至IF段的锁存器
ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm
EX:运算,得到有效地址
M:从数据cache中取数并放入锁存器WB:将取出的数写回寄存器
STORE指令:IF:根据PC从指令Cache取指令至IF段的锁存器
ID:将基址寄存器的值放到锁存器A,将偏移量的值放到Imm。将要存的数放到BEX:运算,得到有效地址。并将锁存器B的内容放到锁存器Store。
M:写入数据cache
WB:空段
条件转移指令:IF:根据PC从指令Cache取指令至IF段的锁存器
lD:进行比较的两个数放入锁存器A、B;偏移量放入lmm
EX:运算,比较两个数
M:将目标PC值写回PC
WB:空段
无条件转移指令:IF:根据PC从指令Cache取指令至IF段的锁存器
ID:偏移量放入Imm
EX:将目标PC值写回PC(左图没画全)M:空段
WB:空段

总线

CPU和主存之间通过总线相连
总线是一组能为多个部件分时共享的公共信息传送线路
同一时刻只允许一个部件向总线发送信息,多个部件要发送信息只能分时
-特性:
分类:按数据传输形式分为串行和并行总线
按功能分类可分为3类:片内总线(芯片内部总线)
系统总线:系统内各个功能部件(CPU,主存等等)中间相互连接的总线。又分为三类:
数据总线,双向。运输数据
地址总线,单向,MAR中的地址信息会经过地址总线
控制总线:包括CPU送出的控制命令和主存返回CPU的反馈信号(读/写)
通信总线:用于通信,在外部又称外部总线
系统总线的结构:单总线结构:系统总线,结构简单,成本低,易于接入新设备,带宽低,负载重
双总线结构:(主存+io)将速度慢的io总线分出去,提高速度
三总线结构:增加一个DMA总线(直接内存访问)
四总线结构:CPU总线,系统总线,高速总线,扩充总线
按时序分为同步总线和异步总线
性能指标:总线的传输周期(总线周期):一次总线操作所需的时间(包括申请阶段、寻址阶段、传输阶段和结束阶段),通常由若干个总线时钟周期(等于机器时钟周期)构成。
总线的工作频率:总线上各种操作的频率,为总线周期的倒数。
若总线周期=N个时钟周期,则总线的工作频率=时钟频率/N。实际上指一秒内传送几次数据。
总线的时钟频率:即机器的时钟频率,为时钟周期的倒数。实际上指一秒内有多少个时钟周期。
总线宽度:又称为总线位宽,它是总线上同时能够传输的数据位数,通常是指数据总线的根数,如32根称为32位(bit)总线。
总线带宽:可理解为总线的数据传输率,即单位时间内总线上可传输数据的位数,通常用每秒钟传送信息的字节数来衡量,单位可用字节/秒(B/s)表示。
总线带宽=总线工作频率×总线宽度(bit/s)=总线工作频率×(总线宽度/8)(B/s)
总线复用:总线复用是指一种信号线在不同的时间传输不同的信息。可以使用较少的线传输更多的信息,从而节省了空间和成本。
信号线数:地址总线、数据总线和控制总线3种总线数的总和称为信号线数。
总线仲裁:多个主设备竞争总线的控制权
集中仲裁方式:获得总线控制权的设备会发出总线忙的信号
工作流程:1.主设备发出请求信号;⒉.若多个主设备同时要使用总线,则由总线控制器的判优、仲裁逻辑按一定的优先等级顺序确定哪个主设备能使用总线;3.获得总线使用权的主设备开始传送数据。
分为链式查询方式:信号按链式(优先级排列)传递,获得总线的设备会截断信号
计数器查询方式 :结构特点:用一个计数器控制总线使用权,相对链式查询方式多了一组设备地址线,少了一根总线响应线BG;它仍共用一根总线请求线。若计数器从0开始,则和链式查询一样
分布仲裁方式:没有中央仲裁器
设备使用总线的四个周期 1.申请控制权 2.寻址: 3.传输: 4.让出控制权
总线定时:是指总线在双方交换数据的过程中需要时间上配合关系的控制,分为以下几种
同步定时:总线控制器采用一个统一的时钟信号来协调发送和接收双方的传送定时关系。速度快
异步定时:没有统一时钟信号,从设备会发出信号回答主设备,又分为以下三种
不互锁:主设备不等回答,从设备自动撤销回答
半互锁:主设备等回答,从设备自动撤销回答
全互锁:主设备等回答,从设备等主设备接收到回答后才撤销
半同步定时 分离式定时

(88)波特率:
比特率:
有效数据传输率:
-(89)usb,IDE,SATA等等总线标准

IO

数据流:键盘→io接口的数据寄存器→数据总线→CPU某寄存器→主存(变量i的对应位置)
CPU如何控制键盘io的完成?
1.程序查询方式:CPU不断轮询检查i/o控制器中的“状态寄存器”,检测到状态为“已完成”之后,再从数据寄存器取出输入数据
2.程序中断方式:等待键盘i/o时cPU可以先去执行其他程序,键盘i/o完成后l/o控制器向CPU发出中断请求,CPU响应中断请求,并取走输入数据
3.DMA控制方式:主存与高速I/O设备之间有一条直接数据通路(DMA总线)。CPU向DMA接口发出“读/写”命令,并指明主存地址、磁盘地址、读写数据量等参数。DMA控制器自动控制磁盘与主存的数据读写,每完成一整块数据读写(如1KB为一整块),才向CPu发出一次中断请求。
IO指令包括操作码(识别io指令),命令码(做什么操作),设备码(对哪个设备进行操作)
4.通道方式。3.4用于数据传输率高的设备
VRAM容量:=分辨率灰度级位数
VRAM带宽:=分辨率
灰度级位数*帧频
磁盘存储器位密度:每一圈的位数是一样的,所以越内全密度越大
磁表面存储器:容量大,价格低,记录介质可重复使用,记录信息长期保持可脱机,非破坏性读出
平均存取时间=寻道时间(磁头移动到目的磁道)+旋转延迟时间(磁头定位到所在扇区)+传输时间(传输数据所花费的时间)
磁盘地址包括驱动器号,柱面(磁道)号,盘面号,扇区号
工作过程:寻址,读,写(读写不能同一时刻进行)
io接口的工作原理:
io端口及其编址:统一编址:靠不同的地址码区分内存和/o设备,I/o地址要求相对固定在地址的某部分。程序设计灵活,控制逻辑电路简单,缺点是占用主存地址空间,地址译码速度慢
独立编址:靠不同的指令区分内存和/o设备。
程序查询方式:
中断
可屏蔽中断:关中断下不会响应(实现原子操作)
中断判优(优先级):硬件故障中断属于最高级,其次是软件中断;
非屏蔽中断优于可屏蔽中断;
DMA请求优于io设备传送的中断请求
高速设备优于低速设备;
输入设备优于输出设备;
实时设备优于普通设备。
中断处理过程:1.关中断 保护断点和现场期间不能被新的中断所打断
2.保持断点 3.引出中断服务程序 4.保存现场和屏蔽字 5.开中断
6.执行中断服务程序 7.关中断 8.恢复现场和屏蔽字 9.开中断,中断返回
DMA方式:计算机组成原理408_第2张图片

汇编语言:
LDA D 这里的A指ACC,这段代码的意思是取地址D中的数据到ACC中
LDA #0 #是立即寻址的意思,即将0赋值给ACC
LDX X指变址寄存器
ADD D+1 这段代码的意思是将D+1的值和ACC中的值进行相加,结果赋给ACC(第三行)
INX 这段代码相当于X++
CPX #10 CP一般和BNE合用,这段代码的意思是X-10,若结果为0,则Z=1,否则Z=0(Z应该是CP内部的一个标识位)
BNE M 若Z=0,将M的值赋给PC,若Z=1.则PC=PC+1(M是某一行代码的地址,在这里表示第三行(自己定义的))(PC是一个计数器,表示下一条待执行的代码的地址)

你可能感兴趣的:(C语言学习,其他)