参考:
计算机如何区分是指令还是数据
https://zhidao.baidu.com/question/305357780899641564.html
按字寻址和按字节寻址
计算机组成原理(第二版)唐朔飞 P73
https://blog.csdn.net/lishuhuakai/article/details/8934540
https://blog.csdn.net/Xavier_97/article/details/72511186
https://blog.csdn.net/softfox/article/details/43890859
总线仲裁之计数器定时查询
https://blog.csdn.net/Mtrix/article/details/53954402
多级层次结构的计算机系统
细化的计算机组成框图
CPU内部结构图
存储器分类
缓存——主存层次和主存——辅存层次
主存的基本组成
主存和CPU的联系
**********************************************************************************************************
运算器加减乘除的操作过程
各寄存器所存放的各类操作数
运算器可将运算结果从ACC送至存储器中的MDR,而存储器的操作数也可从MDR送至运算器中的ACC、MQ或X。
上述结构的运算器加、减、乘、除四则运算的操作过程:
设:M表示存储器的任一地址号,[M]表示对应M地址号单元中的内容;X表示X寄存器,[X]表示X寄存器中的内容;ACC表示累加器,[ACC]表示累加器中的内容;MQ表示乘商寄存器,[MQ]表示乘商寄存器中的内容。
假设ACC中已有前一时刻的运算结果,并作为下述运算中的一个操作数,则
1. 加法操作过程为
[M]——>X
[ACC]+[X]——>[ACC]
即将[ACC]看作被加数,先从主从中取一个存放在M地址号单元内的加数[M],送至运算器的X寄存器中,然后将被加数[ACC]与加数[X]相加,结果(和)保留在ACC中。
2.减法操作过程为
[M]——>X
[ACC]-[X]——>[ACC]
即将[ACC]看作被减数,先取出存放在主存M地址号单元中的减数[M]并送入X,然后[ACC]-[X],结果(差)保留在ACC中。
3.乘法操作过程为
[M]——>MQ
[ACC]——>X
0——>ACC
[X]x[MQ]——>ACC//MQ
即将[ACC]看作被乘数,先取出放在主存M号地址单元中的乘数[M]并送入乘商寄存器MQ,再把乘数送入X寄存器,并将ACC清“0”,然后[X]和[MQ]相乘,结果(积)的高位保留在ACC中,低位保留在MQ中。
4.除法操作过程为
[M]——>X
[ACC]/[X]——>MQ
余数R在ACC中
即将[ACC]看作被除数,先取出存放在主存M号地址单元内的除数[M]并送至X寄存器,然后[ACC]除以[X],结果(商)暂留于MQ,[ACC]为余数R。若需要将商保留在ACC中,只需要做一步[MQ]——>ACC即可。
**********************************************************************************************************
计算机工作的全过程
按上表所列的有序指令和数据,通过键盘输入到主存第0号到12号单元中,并置PC的初值为0(令程序的首地址为0)。启动机器后,计算机便自动按存储器中所存放的指令顺序有序地逐条完成取指令、分析指令和执行指令,直到执行到程序的最后一条指令为止。
取指:PC——>MAR——>[M]——>MDR——>IR
加法执行:Ad(IR)——>MAR——>[M]——>MDR——>ACC
PC——>MAR:启动机器后,控制器立即将PC的内容送至主存的MAR(记作PC——>MAR),
[0]——>MDR:并命令存储器做读操作,此刻主存"0"号单元的内容"0000 0100 0000 1000"便被送入MDR内
MDR——>IR:然后由MDR送至控制器的IR(记作MDR——>IR),完成了一条指令的取指过程。
OP(IR)——>CU:经CU分析(记作OP(IR)——>CU),操作码"00 0001"为取数指令,
Ad(IR)——>MAR:于是CU又将IR中的地址码"00 0000 1000"送至MAR(记作Ad(IR)——>MAR)
x——>MDR:并命令存储器做读操作,将该地址单元中的操作数x送至MDR,
MDR——>ACC:再由MDR送至运算器的ACC(记作MDR——>ACC),完成此指令的执行过程。
此刻也即完成了第一条取数指令的全过程,即将操作数x送至运算器ACC中。
(PC)+1——>PC:与此同时,PC完成自动加1的操作,形成下一条指令的地址"1"号。
PC——>MAR:同上所述,由PC将第二条指令的地址送至MAR,
[1]——>MDR:命令存储器做读操作,将"0001 0000 0000 1001"送入MDR,
MDR——>IR:又由MDR送至IR。
OP(IR)——>CU:接着CU分析操作码"00 0100"为乘法指令,
Ad(IR)——>MAR:故CU向存储器发出读命令,取出对应地址为"00 0000 1001"单元中的操作数a,
x——>MDR
MDR——>MQ:经MDR送至运算器MQ,
CU再向运算器发送乘法操作命令,完成ax的运算,并把运算结果ax存放在ACC中。
同时,PC又完成一次(PC)+1——>PC,形成下一条指令的地址"2"号。
依次类推,逐条取指、分析、执行,直至指印出结果。最后执行完停机指令后,机器便自动停机。
**********************************************************************************************************
以存储器为中心的双总线结构框图
双总线结构
三总线结构
三总线结构二
四总线结构
传统微型计算机总线结构
VL-BUS局部总线结构
PCI总线结构
多层PCI总线结构
**********************************************************************************************************
总线仲裁之计数器定时查询
总线仲裁中集中式仲裁有一个计数器定时仲裁,看书的时候没弄懂。其实很简单,我们来看看它的工作过程:
假设总线仲裁器中计数初值为0,这时设备2、4都通过BR线发出请求,如果设备不忙既BS为0,计数器开始从0计数。
并通过设备地址线查看该设备是否发出请求,如果是,则响应否则继续计数。这里设备0没有请求,继续计数直至2,
发现设备2有请求则响应,并将BS线设为1。
如果每次查询计数器都从0开始,那么毫无疑问设备优先级和链式查询一样。如果从中止点开始(如上例中下次查询计数器从2开始计数并查询),
那么可以实现循环优先级。也可以用软件设置计数初值为k,那么设备k的优先级最高。
**********************************************************************************************************
单元ACC中指令和数据均存放在内存中,计算机如何区分它们是指令还是数据?
通常完成一条指令可分为取指阶段、分析阶段和执行阶段。在取指阶段通过访问存储器可将指令取出;在执行阶段通过访问存储器可将操作数取出。这样,虽然指令和数据都是以0、1代码形式存在存储器中,但CPU可以判断出在取指阶段访存取出的0、1代码是指令;在执行阶段访存取出的0、1代码是数据。
计算机区分指令和数据有以下2种方法:
1. 通过不同的时间段来区分指令和数据,即在取指令阶段(或取指微程序)取出的为指令,在执行指令阶段(或相应微程序)取出的即为数据。
备注:在取指令时期,cpu通过指令流取指令,存放在指令寄存器, 然后解释并执行指令;在执行指令时期,cpu通过数据流取数据, 存放在数据寄存器。
2. 通过地址来源区分,由PC(程序计数器)提供存储单元地址的取出的是指令,由指令(指令=操作码+地址码)地址码部分提供存储单元地址的取出的是操作数。
**********************************************************************************************************
按字寻址和按字节寻址
我们先从一道简单的问题说起!
设有一个1MB容量的存储器,字长32位,问:按字节编址,字编址的寻址范围以及各自的寻址范围大小?
如果按字节编址,则
1MB = 2^20B
1字节=1B=8bit
2^20B/1B = 2^20
地址范围为0~(2^20)-1,也就是说需要二十根地址线才能完成对1MB空间的编码,所以地址寄存器为20位,寻址范围大小为2^20=1M
如果按字编址,则
1MB=2^20B
1字=32bit=4B
2^20B/4B = 2^18
地址范围为0~2^18-1,也就是说我们至少要用18根地址线才能完成对1MB空间的编码。因此按字编址的寻址范围是2^18
以上题目注意几点:
1.区分寻址空间与寻址范围两个不同的概念,寻址范围仅仅是一个数字范围,不带有单位
而寻址范围的大小很明显是一个数,指寻址区间的大小。
而寻址空间指能够寻址最大容量,单位一般用MB、B来表示;本题中寻址范围为0~(2^20)-1,寻址空间为1MB。
2.按字节寻址,指的是存储空间的最小编址单位是字节,按字编址,是指存储空间的最小编址单位是字,以上题为例,总的存储器容量是一定的,按字编址和按字节编址所需要的编码数量是不同的,按字编址由于编址单位比较大(1字=32bit=4B),从而编码较少,而按字节编址由于编码单位较小(1字节=1B=8bit),从而编码较多。
3.区别M和MB。
M为数量单位。1024=1K,1024K=1M
MB指容量大小。1024B=1KB,1024KB=1MB.
寻址就是寻找地址,当CPU请求数据的时候就会对进行读数据的请求。假设我们有一块硬盘,那么硬盘在接收到请求之后就开始查找这个CPU需求的数据具体是放在哪呢?实际上,硬盘上储存的所有数据都有一个自己的地址,在物理上实现是通过磁头在盘片上定位数据的一个过程。
主存各存储单元的空间位置由单元地址号来表示,而地址总线是用来指出存储单元地址号的,根据该地址可读出或写入一个存储字。不同的机器存储字长也不同,常用8位二进制数表示一个字节,因此存储字长都取8的倍数。
通常计算机既可按字寻址,也可按字节寻址。例如IBM370机的字长为32位,它可按字节寻址,即它的每一个存储字包含4个可独立寻址的字节。字地址是用该字高位字节的地址(高位字节所在的地址)来表示,故其字地址都是4的整数倍,正好用地址码的末两位来区分同一字的4个字节的位置。但对PDP-11机而言,其字长为16位,字地址是2的整数倍,它用低字节的地址来表示字地址。
如图4.6(a)所示对24位地址线的主存而言,按字节寻址的范围是16M,按字寻址的范围为4M。由图4.6(b)所示,对24位地址线而言,按字节寻址的范围仍为16M,但按字寻址的范围为8M。
我的理解:
按字节寻址,就是每个字节都有1个地址,反过来说就是寻址范围内的每个地址(每个数字)都对应存储器中的1个字节,这里字节作为寻址的基本单位,所以寻址范围完全为地址线的宽度决定,例如24位地址线,按字节寻址的范围就是2^24=16M。
按字寻址,每个字有1个地址,这里的寻址范围除了地址线宽度以外,还跟字长有关。如果字长是32位,那么1个字就是4个字节。所以寻址范围就是“按字节寻址的寻址范围/4”,具体到地址线来说,如果地址线宽度是24位,按字寻址的寻址范围就是16M/4=4M,只需要占用地址线其中的22位,那么地址线剩余的两位用来做什么呢?正好用来区分同一字的4个字节的位置。由于1个字包含多个字节,所以字地址具体是由该字的高位字节的地址还是低位字节的地址来表示,由具体的机器自行决定。
同理,如果字长是16位,那么1个字就是2个字节。所以寻址范围就是“按字节寻址的寻址范围/2”,具体到地址线来说,如果地址线宽度是24位,按字寻址的寻址范围就是16M/2=8M,只需要占用地址线其中的23位,那么地址线剩余的一位用来做什么呢?正好用来区分同一字的2个字节的位置。
下面我们从三个例题来入手:
例1:设有一台机器有24根地址线,按字节寻址,求其寻址范围。
解:如果按照字节寻址,就是一个地址线表示的数(即状态)对应一个字节的地址。由此可以得到地址的范围(即状态总和)就是224224,即16M。
例2:设有一台机器有24根地址线,其字长为16位,按字寻址,求其寻址范围。
解:字里面封装了字节,为了确保每个字节或者说每个数据都有自己的一个编号,那么需要牺牲一部分地址线来实现。16位字长的机器,每个字表示2个字节,用1位地址线就能区分出来,这边可以类比成“每个袋子装了两个包子,而我现在只给袋子编号,那么你想要找到袋子里面的包子到底是第一个还是第二个就必须在拿出一位的0和1来表示第一个还是第二个包子”。由此表示字地址的数据线位数就只剩下了24-1=23位了。所以寻址的范围就变成了2^23,即4M了。
例3:设有一台机器有24根地址线,其字长为32位,按字寻址,求其寻址范围。
解:16M/4=4M