计算机组成原理复习题库(计算题)

1、某计算机指令字长32位,有3种指令:无操作数指令、单操作数指令和双操作数指令。采用扩展操作码的方式来设计指令。假设操作数地址为12位,已知有双操作数指令K 条、单操作数指令L条,问:无操作数指令有多少条?

解答:指令格式如下:

        操作码为 8 位,最多有 2 8 条双操作数指令,现双操作数指令有 K 条,所以还有 (2 8 - K )种编码留给单操作数和无操作数指令用。把操作码扩展到A1, 12 ~31 位还有 (2 8 - K ) * 2 12 种编码。

        在(2 8 - K ) * 2 12种编码中,单操作数指令占了 L 条,所以留给无操作数指令的只有 (2 8- K ) * 2 12 - L  种编码。

        A2为 12 位,有 2 12种编码,所以无操作数指令有:[(2 8 - K ) * 2 12 - L ] * 2 12条。

2、某指令系统指令字长16位,每个操作数的地址码长6位,指令分为无操作数、单操作数和双操作数三类。若双操作数指令有K 条,无操作数指令有 L 条,问单操作数指令最多可能有多少条?

解答:指令格式如下:

OP(12~15)

A1(6~11)

A2  (0~5)

        操作码为 4 位,最多有 2 4 条双操作数指令,现双操作数指令有K 条,所以还有 (2 4  - K )种编码留给单操作数和无操作数指令用。6 ~ 15 位还有 (2 4 - K ) * 2 6 种编码。

        在(2 4 - K ) * 2 6种编码中,无操作数指令占了 L / 2 6 条,所以留给单操作数指令的只有 (2 4 - K ) * 2 6  - L / 2 6  条。单操作数指令最多可能有(2 4 - K ) * 2 6  - L / 2 6 条。

3、已知某8位机的主存采用半导体存贮器,地址码为18位,若使用4K×4位RAM芯片组成该机所允许的最大主存空间,并选用模块条的形式,问:

(1)若每个模条为32K×8位,共需几个模块条?

(2)每个模块内共有多少片RAM芯片?

(3)主存共需多少RAM芯片?CPU如何选择各模块条?

解答:(1)由于主存地址码给定18位,所以最大存储空间为218 = 256K,主存的最大容量为256KB。现每个模块条的存储容量为32KB,所以主存共需256KB / 32KB = 8 块板。

   (2) 每个模块条的存储容量为32KB,现使用4K×4位的RAM芯片拼成4K×8位(共8组),用地址码的低12(A0-A11)直接接到芯片地址输入端,然后用地址的高3位(A14-A12)通过3 :8译码器输出分别接到8组芯片的选片端。共有8×2 = 16个RAM。

  (3) 据前面所得,共需8个模条,每个模条上有16片芯片,故主存共需8×16 =128片RAM芯片。

CPU通过最高3位地址译码输出选择模板,次高3位地址译码输出选择芯片。地址格式分配如下:

模板号(3位)

芯片号(3位)

片内地址(12位)

4、设有利用若干片256K×8位SRAM芯片构成2048K×32位的存储器,问:
(1) 需要多少片RAM芯片?
(2) 该存储器需要多少字节地址位?
(3) 如何构成2048K×32位的存储器?画出该存储器与CPU连接的结构图,设CPU的接口信号有地址信号、数据信号、控制信号MREQ#和R/W#。

解答:(1) 该存储器需要(2048K×32)/(256K×8) = 32片SRAM芯片;
    (2) 2048K×32=8MB,需要23条地址线,因为223=8MB

 (3)23条地址其中高3位用于芯片组选择,低18位作为每个存储器芯片的地址输入。该存储器与CPU连接的结构图如下:

5、某计算机的主存地址空间中,从地址0000H到3FFFH为ROM存储区域,从4000H到5FFFH为保留地址区域,暂时不用,从6000H到FFFFH为RAM地址区域。RAM的控制信号为CS#和WE#,CPU的地址线为A15~A0,数据线为8位的线路D7~D0,控制信号有读写控制R/W#和访存请求MREQ#。
 (1) 画出地址译码方案
 (2) 如果ROM和RAM存储器芯片都采用8K×1的芯片,试画出存储器与CPU的连接图。

解: ROM 存储区域为 0000H到3FFFH,所以ROM的容量为4× 4K=16K;
    RAM存储区域为6000H到FFFFH ,所以ROM的容量为10×4K=40K;
    ROM和RAM存储器芯片都采用8K×1位的芯片。所以ROM 用2组8K×8位的存储的芯片组成;RAM 用5组8K×8位的芯片组成;采用位扩展方式用8K×1的芯片构成8K×8位的芯片。
    8KB的存储区域可以用8片存储器芯片构成一组实现。8K×1位的存储器芯片的地址线需要13条,即A12-A0。

(1)地址译码方案

       译码输出逻辑表达式:

(2) 8KB的存储区域可以用8片存储器芯片构成一组实现。8K×1的

存储器芯片的地址线需要13条,即A12-A0。

6、设CPU共有16根地址线,8根数据线,并用(低电平有效)作访存控制信号,作读写命令信号(高电平为读,低电平为写)。系统程序区:0000H-0FFFH,用户程序区:1000H-3FFFH,现有下列存储芯片:ROM(2K×8位,4K×4位,8K×8位),RAM(1K×4位,2K×8位,4K×8位),及74138译码器和其他门电路(门电路自定)。试从上述规格中选用合适芯片,画出CPU和存储芯片的连接图。要求:

(1)指出选用的存储芯片类型及数量。

(2)详细画出片选逻辑。

解答:系统程序区(ROM共4KB):0000H-0FFFH,用户程序区(RAM共12KB):1000H-3FFFH

1)选片:ROM:选择4K×4位芯片2片,位并联

              RAM:选择4K×8位芯片3片,字串联(RAM1地址范围为:1000H-1FFFH,RAM2地址范围为2000H-2FFFH, RAM3地址范围为:3000H-3FFFH)

(2)各芯片二进制地址分配如下:

A15

A14

A13

A12

A11

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

ROM1,2

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

RAM1

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

RAM2

0

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

RAM3

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

CPU和存储器连接逻辑图及片选逻辑如下图所示:

7、某微程序控制器,采用水平直接控制微指令格式,断定方式。已知全机共有微命令22个,可判定的外部条件有4个,控制存储器为128 × 32 (位).请设计微指令的格式。

解答:水平直接控制微指令格式,共有微命令22个,所以微指令的控制字段为22位。

采用断定方式,则微指令地址由设计者确定,或由设计者指定的判别字段控制产生。当微程序出现分支时,后继地址的形成依赖于状态条件。顺序运行时则由微指令中的下址字段直接指示。

外部条件有4个,所以判别测试字段长度为 2。

控存容量为128 X 32 (位),微指令都是等长的,为32位。若按位寻址,则下地址长度会大大增长。若按照定长的32位微指令格式,则只需要7位地址字段即可。

     所以将下地址长度扩展为8位,下地址形式位0XXX XXXX。

     微指令格式为:

  操作控制字段

(22位)

外部条件字段

(2位)

下地址字段

(8位)

8、假设某机器有80条指令,平均每条指令有4条微指令组成,其中有一条取指微指令是所有指令公用的,已知微指令长度为32位,请估算控制存储器容量。

解答:微指令的数目为80×3+1=241条;

微指令字长为32/8=4字节;

所以,控制存储器的容量为 241×4=964字节,该容量为控制存储器的最小容量。

9、某32位机共用微操作信息52个,构成 5个相斥类微命令组,各组分别包含4个、5个、8个、15个和20个微命令。已知可判定外部条件有CY和ZF两个,微指令字长为29位。

(1)给出采用断定方式的水平型微指令格式。

(2)控制存储器的容量应为多少位?

解答:(1)根据5个互斥类的微命令组,各组分别包括4、5、8、15、20个微命令。各控制字段中须包含一种不发出命令的情况,条件测试字段包含一种不转移的情况,则五个控制字段分别需要给出5、6、9、16、21种状态,对应于3、3、4、4、5位(共19位),条件测试字段取2位.根据微指令字长为29位,下地址字段取29-19-2=8位,则微指令格式如下: 

4个微命令

5个微命令

8个微命令

15个

微命令

20个

微命令

条件测

试字段

下一地址

字段

        3位                 3位                 4位                4位                 5位                 2位                8位

(2)根据后继地址字段为8位,微指令字长为29位,控制存储器容量为:28*29=256*29

10、某程序对页面要去的序列为:3,4,2,4,4,3,6,4,3,6,3,4,5,4,6,设主存页面容量为3个页面,求LRU替换算法的命中率(假设开始时主存为空)。

解答:页面请求如下图:

页面请求

3

4

2

4

4

3

6

4

3

6

3

4

5

4

6

L

R

U

3

3

3

3

3

2

4

3

6

4

4

6

3

3

5

/

4

4

2

2

4

3

6

4

3

6

3

4

5

4

/

/

2

4

4

3

6

4

3

6

3

4

5

4

6

命中

×

×

×

×

×

×

命中率为:9/15=60%   

11、假设某机器的 Cache 为空,Cache有4个块,采用全相联映射,CPU访问主存顺序如下表所示,求分别采用FIFO和LRU算法的命中率并给出Cache块的变化过程。

序号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

主存地址页

2

3

1

2

5

2

0

1

2

7

1

2

5

2

5

解:(1)采用FIFO算法Cache块内容的变化过程如下:

序号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

主存地址

2

3

1

2

5

2

0

1

2

7

1

2

5

2

5

1

2

2

2

2*

2

2*

3

3

1

5

0

0

2

2*

2

2

3

3

3

3

3

1

1*

5

0

2

2*

7

7

7

3

1

1

1

1

5

5

0

2

7

7

1

1

1

4

5

5

0

0

2

7

1

1

5

5

5*

是否命中

×

×

×

×

×

×

×

×

×

命中率为H=6/15=40%

(2)采用LRU算法Cache块内容的变化过程如下:

序号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

主存地址

2

3

1

2

5

2

0

1

2

7

1

2

5

2

5

1

20

21

22

20*

21

20*

21

22

20*

21

22

20*

21

20*

21

2

30

31

32

33

34

00

01

02

03

04

05

50

51

50*

3

10

11

12

13

14

10*

11

12

10*

11

12

13

14

4

50

51

52

53

54

70

71

72

73

74

75

是否命中

×

×

×

×

×

×

×

表中每个块编号的上角标是年龄计算器的值

命中率为H=8/15= 58.3%

或如下:

序号

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

页面请求

2

3

1

2

5

2

0

1

2

7

1

2

5

2

5

L

R

U

 2

2

 2

3

 3

3

1

 5

5

0

0

 0

7

7

7

/

3

 3

 1

1

1

5

2

 0

1

2

7

 1

1

1

 /

/

 1

 2

 2

5

2

 0

1

 2

7

 1

 2

5

2

/

/

/

/

5

2

0

1

2

7

1

2

5

2

5

命中

×

×

×

×

×

×

×

命中率为:H=8/15= 58.3%   

12、主存容量1MB,划分为2048块,每字块512 B。Cache容量为8KB。若访主存地址为123B5H,

(1)采用直接映像,问Cache地址?主存的第几块映射到Cache的第1块?

(2)若Cache 采用4路组相联,问Cache 地址?

解: 主存容量1MB,划分为2048块,每字块512 B, Cache容量为8KB,20位主存地址为123B5H化为二进制:0001 001 0 001 1 1011 0101,Cache 地址为13位。

(1)采用直接映像,Cache地址为:0 0011 1011 0101 。

   主存块:0001 0010 001 映射到 Cache的0001块,块内偏移地址为1 1011 0101。主存字块标记为: 0001 001。

   主存的第1+16*K (K=0,1,2,…,127)块映射到Cache的第1块

(2) 采用4路组相联映像,16个Cache块分为4组(组号在Cache块号高位),每组4个块,123B5H化为二进制:0001 001  0 0  01  1 1011 0101 ,块内偏移地址为1 1011 0101。

   假设组号在Cache块号高位,则主存块:0001 0010 001 映射到Cache的第00组,块内偏移地址为1 1011 0101。主存字块标记为: 0001 001 01,Cache 地址可能为:①0000 11011 0101②0001 11011 0101③0010 11011 0101④0011 11011 0101这四个地址之一。

   或假设组号在Cache块号低位,则主存块:0001 0010 001 映射到Cache的第01组,块内偏移地址为1 1011 0101。主存字块标记为: 0001 001 00,Cache 地址可能为:①0001 11011 0101②0101 11011 0101③1001 11011 0101④1101 11011 0101这四个地址之一。

(注意:组相联映像方式中,以唐朔飞教材为代表的是采用组号在Cache块号低位方案,以蒋本珊教材为代表的是采用组号在Cache块号高位方案,这两种方案都是可以的

13、某计算机的Cache 采用4路组相联映像,Cache容量为8KB, 主存容量为16MB,每个字块有8个字,每个字有32位.问:

(1)主存地址多少位(按字节编址),各字段如何划分?

(2) 设Cache初始为空,CPU依次从主存第0,1,2,…,99号单元读出100个字( 主存一次读1个字),并重复此次序读10次,问命中率是多少?

(3)若Cache的速度是主存速度的5倍,有Cache访存速度是无Cache多少倍?

解答:主存容量为16MB,所以主存地址为24 位。各字段划分为:

主存字块标记13bits

Cache组号

6bits

块内地址

3bits

字节

2bits

主存高位地址

11bits

Cache组号

6bits

组内字块号

2bits

块内地址

3bits

字节

2bits

(2)每个字块中有8个字,Cache初始为空,故CPU读0号单元时未命中,必须访问MM,同时将该字所在的块调入Cache第0组中的任一块内,接着CPU读1~7号单元均命中。同理,CPU读第8,16,24,…,96号单元时均未命中。

    CPU在连续读100个字中共有13次未命中,而后9次循环读100个字全部命中。

         命中率为: (100*10-13)/1000=0.987

(3)设MM存取周期为5t,Cache存取周期为t,没有Cache的访问时间为5t*1000=5000t,有Cache的访问时间为:

       5t*13 +  t(1000-13) = 65tt + 987t = 1052t,则有Cache,速度比为:

                         5000t/1052t=4.75

14、某机器字长32位,具有16KB的直接映射Cache,该Cache块大小为4个字,问主存地址为: ABCDE8F8H的单元在 Cache中的什么位置?

解答: 16KB Cache地址格式为:

Cache字块地址(10位)

字块内地址(4位)

主存地址ABCDE8F8H=1010 1011 1100 1101 1110 1000 1111 1000,块内地址为1000,主存块号为1010 1011 1100 1101 1110 1000 1111。

直接映射下的主存地址格式如下:

主存标记

18位

Cache块号

10位

块内地址

4位

主存地址为: ABCDE8F8H的单元在 Cache中的地址为10 1000 1111 1000

15、某机主存容量1MB,字长1B,块大小16B,Cache容量64KB,若Cache采用直接映射方式,请给出2个不同标记的内存地址,它们映射到同一个Cache行。

解答:每块16B,块内的字节地址需要4位;Cache容量64KB,共包含4K行, Cache块号12位;主存容量1MB,主存地址20位。

直接映射下的主存地址格式如下:

主存标记

Cache行号

块内地址

4位

12位

4位

两个满足题目要求的主存地址:

                     0000 1001 0000 1110 0000

                     0001 1001 0000 1110 0000

16. 一个组相连映射的CACHE由64块组成,每组内包含4块。主存包含4096块,每块由128字组成,访存地址为字地址。试问主存和高速存储器的地址各为几位?画出主存地址格式。

解答:Cache组数:64/4=16 ,Cache容量为:64*128=213字,Cache地址13位

主存共分4096/16=256区,每区16块

主存容量为:4096*128=219字,主存地址19位,地址格式如下:

主存字块标记(8位)

Cache组号(4位)

字块内地址(7位)

或:

主存高位地址(6位)

Cache组号(4位)

组内字块号(2位)

字块内地址(7位)

17. 设主存容量为1MB,采用直接映射方式的Cache容量为16KB,块长为4字,每字32位。试问主存地址为ABCDEH的存储单元在Cache中的什么位置?

解答:主存和Cache按字节编址,Cache容量16KB=214B,Cache地址为14位,分为16KB/(4*32/8B)=210块,每块4*32/8=16B=24B,Cache地址格式为:

Cache字块地址(10位)

字块内地址(4位)

主存容量1MB=220B,地址共格式为20位,分为1MB/(4*32/8B)=216块,每块24B,采用直接映射方式,主存字块标记为20 - 14=6位,主存地址格式为:

主存字块标记(6位)

Cache字块地址(10位)

字块内地址(4位)

主存地址为ABCDEH=1010 1011 1100 1101 1110B,主存字块标记为101010,Cache字块地址为11 1100 1101,字块内地址为1110,故该主存单元应映射到Cache的11 1100 1101块的第1110字节。或者在Cache的第11 1100 1101 1110=3CDEH字节位置。

18. 设主存容量为256K字,Cache容量为2K字,块长为4字。

(1)设计Cache地址格式,Cache中可装入多少块数据?

(2)在直接映射方式下,设计主存地址格式。

(3)在四路组相联映射方式下,设计主存地址格式。

(4)在全相联映射方式下,设计主存地址格式。

解答:1Cache容量为2K字,块长为4Cache共有2K/4=211/22=29=512块,

Cache字地址为9位,字块内地址为2

        因此Cache地址格式设计如下

Cache字块地址(9位)

字块内地址(2位)

   2主存容量为256K=218字,主存地址共18位,共分256K/4=216块,

        主存字块标记为18-9-2=7位。

        直接映射方式下主存地址格式如下

主存字块标记(7位)

Cache字块地址(9位)

字块内地址(2位)

   3)根据四路组相联的条件,一组内共有4块,得Cache共分为512/4=128=27组,

主存字块标记为18-7-2=9位,主存地址格式设计如下:

主存字块标记(9位)

组地址(7位)

字块内地址(2位)

   4)在全相联映射方式下,主存字块标记为18-2=16位,其地址格式如下:

主存字块标记(16位)

字块内地址(2位)

 19、若机器有5级中断,中断响应优先级为1-2-3-4-5,而中断处理优先级为1-4-5-2-3。要求:

① 设计各级中断处理程序的中断屏蔽位(令1为屏蔽,0为开放);

② 若在运行主程序时,同时出现第4、2级中断请求,而在处理第2级中断过程中,又同时出现1、5、3级中断请求,试画出此程序运行过程示意图。

解: (1)各级中断处理程序的中断屏蔽位(令1为屏蔽,0为开放)如下图:

中断程

序级别

屏蔽字

1级

2级

3级

4级

5级

第1级

1

1

1

1

1

第2级

0

1

1

0

0

第3级

0

0

1

0

0

第4级

0

1

1

1

1

第5级

0

1

1

0

1

(2)程序运行过程示意图如下:

20、设某机器有5级中断:L0,L1,L2,L3,L4,其中断响应优先次序为:L0->L1->L2->L3->L4,现在要求将中断处理次序改为L1->L3->L0->L4->L2,试问:

(1)将表中各级中断处理程序的各中断屏蔽值如何设置 ?

(每级对应一位,该位为0表示允许中断,为1表示中断屏蔽)

中断处理程序

中断处理级屏蔽位

L0级

L1级

L2级

L3级

L4级

L0中断处理程序

L1中断处理程序

L2中断处理程序

L3中断处理程序

L4中断处理程序

(2)若这5级中断同时发出中断请求,按更改后的次序画出进入各级中断处理程序的过程示意图。

解: (1)每级对应一位,该位为0表示允许中断,为1表示中断屏蔽。各中断屏蔽值设置如下:

中断处理程序

中断处理级屏蔽位

L0级

L1级

L2级

L3级

L4级

L0中断处理程序

1

0

1

0

1

L1中断处理程序

1

1

1

1

1

L2中断处理程序

0

0

1

0

0

L3中断处理程序

1

0

1

1

1

L4中断处理程序

0

0

1

0

1

(2)  ①L1中断时,不允许任何中断,服务完毕后,退回到L0的中断服务程序,这时,允许L3的中断嵌套响应;

②L3服务完毕后,返回L0中断服务程序;

③L0服务完毕后,按照顺序应处理L2,L2开放了更高级中断L4,因此响应了L4,L4响应完成后再继续执行L2级中断服务程序。

④按优先次序先调用L0,L0屏蔽了本级和低级中断请求,而L1的中断请求未屏蔽,则L1发生中断嵌套响应;

中断处理次序为:L1->L3->L0->L4->L2,中断处理过程示意图如下:

21.设某机配有A、B、C三台设备,其优先顺序按A®B®C降序排列,为改变中断处理次序,它们的中断屏蔽字设置如下:

设备

屏蔽字

A

111

B

010

C

011

请按下图所示时间轴给出的设备请求中断的时刻,画出CPU执行程序的轨迹。设A、B、C中断服务程序的执行时间均为20m s。

解: A、B、C设备的响应优先级为A最高、B次之、C最低,处理优先级为A最高、C次之、B最低。CPU执行程序的轨迹图如下:

22.设某机配有四个中断源A、B、C、D,其硬件排队优先次序为:A>B>C>D,现要求将中断处理次序改为:D>A>C>B.

①写出每个中断源对应的屏蔽字。

②按下图时间轴给出的四个中断源的请求时刻,画出CPU执行程序的轨迹。设每个中断源的中断服务程序时间均为20μS .   

解:(1)在中断处理次序改为D>A>C>B后,每个中断源的屏蔽字如下表所示.

中断源

中断处理级屏蔽位

A

B

C

D

A

1

1

1

0

B

0

1

0

0

C

0

1

1

0

D

1

1

1

1

(2)根据新的处理次序,CPU执行程序轨迹如下图所示:

23、某机主存容量为4M×16位,且存储字长等于指令字长,若该机的指令系统具备85种操作。操作码位数固定,且具有直接、间接、立即、相对、基址、

变址等6种寻址方式。

(1)画出一地址指令格式并指出各字段的作用;

(2)该指令直接寻址的最大范围;

(3)一次间址的寻址范围;

(4)相对寻址的位移量。

解答:(1)一地址指令格式为:

OP (7位)

M (3位)

A (6位)

OP : 操作码字段,共7位,可反映85种操作;

M: 寻址方式特征字段,共3位,可反映6种寻址方式;

A: 形式地址字段,共16-7-3 = 6位 

(2)直接寻址的最大范围为26 =64

(3)由于存储字长为16位,故一次间址的寻址范围为216 = 65536

(4)相对寻址的位移量为 -32~+31

24.已知:A=2010×(0.11011011), B=2100×(-0.10101100), 求A+B=?

(假设两数阶码尾数都以补码表示,阶码采用双符号位,尾数用单符号)。

解答:

   假设两数都以补码表示,阶码采用双符号位,尾数用单符号,则它们的浮点表示形式分别为: 

  A和B在机器中的浮点补码表示形式为(双符号位):

                   阶符    阶码     数符           尾数

         A:        00      010       00         11011011

         B:        00      100       11         01010100

(1)对阶:

[DE] = [EA]补 + [- EB]补 = 00,010 + 11,100= 11,110

[DE] = - 2 ,表示B比A大,保留大阶 E= 00100,所以A尾数要右移2位,得到:[MA]补 = 00 00 110 110 11   

(2) 尾数相加

    [MA]补 + [MB]补 = 0000110110 11 + 1101010100 = 11 10001010 11

(3) 规格化处理

    [MA]补 + [MB]补 = 11 10001010 11 ,符合左规条件,左规,移 1位,结果=11 00010101 10 ,阶码为 -1 ,E= 00 011

(4)舍入

丢掉位最高位为1 ,其他位为0,舍去10,得:

     [MA +MB]补 =11 00010101 ,即  M= - 0.11101011

(5)判溢出

    阶码符号为00,故不溢出,故有:A + B= - 0.11101011X 2 011

25.已知x=+0.1011, y=-0.1001,

(1)求:[x]补,[-x]补,[y]补,[-y]补。

(2)求x+y并判溢出(采用双符号位,并写出算式)。

(3)求x-y并判溢出(采用双符号位,并写出算式)。

解答:(1) []补=0.1011, [-]补=1.0101, [y]补=1.0111, [-y]补=0.1001

(2)       00.1011

        + 11. 0111

            00.0010      即x+y=0.0010,没有溢出

(3)  [x-y]补=[x] 补+[-y] 补,即求[]补+[-y]补

                  00.1011

              +  00.1001

                  01.0100      即x-y= 01. 0100,溢出(正溢出)

26.按机器补码浮点运算步骤,计算[x±y]补.

   (1)x=2-011× 0.101 100,y=2-010×(-0.011 100);

   (2)x=2-011×(-0.100 010),y=2-010×(-0.011 111);

   (3)x=2101×(-0.100 101),y=2100×(-0.001 111)。

解答:先将x、y转换成机器数形式

 (1)x=2-011× 0.101 100,y=2-010×(-0.011 100)

[x]=11010.101 100, [y]=11101.100 100

      [Ex]=1,101, [y]=1,110, [Mx]=0.101 100, [My]=1.100 100

 1)对阶:

[DE]=[Ex]+[-Ey] = 11,101+ 00,010=11,111 < 0

ExEy对齐,则:[Ex]+1=11101+00001=11110 = [Ey]

[x]=11100.010 110

2)尾数运算:

   [Mx]+[My]= 0.010 110 + 11.100 100=11.111010

[Mx]+[-My]=0.010 110 + 00.011100= 00.110 010

 3)结果规格化:

   [x+y]=1111011.111 010 = 1101111.010 000 (尾数左规3次,阶码减3

   [x-y]=1111000.110 010, 已是规格化数。

4)舍入:无

5)溢出:无

则:x+y=2-101×-0.110 000

    x-y =2-010×0.110 010

(2)x=2-011×(-0.100010),y=2-010×(-0.011111)

     [x]=11011.011 110, [y]=11101.100 001

1)对阶:过程同(1)1),则

[x]=11101.101 111

2)尾数运算:

     [Mx]+[My]= 11.101111 + 11. 100001 = 11.010000

     [Mx]+[-My]= 11.101111 + 00.011111 = 00.001110

3)结果规格化:

 [x+y]=1111011.010 000,已是规格化数

 [x-y]=1111000.001 110 =1110000.111000 (尾数左规2次,阶码减2

4)舍入:无

5)溢出:无

则:x+y=2-010×-0.110 000

    x-y =2-100×0.111 000

(3)x=2101×(-0.100 101),y=2100×(-0.001 111)

     [x]=01011.011 011, [y]=01001.110 001

1)对阶:

[DE]=00101+11100=00001 >0,应EyEx对齐,则:

[Ey]+1=00100+00001=00101=[Ex]

[y]=01011.111 0001

2)尾数运算:

  [Mx]+[My]= 11.011011+ 11.1110001= 11.0100111

  [Mx]+[-My]= 11.011011+ 00.0001111= 11.1000101

3)结果规格化:

   [x+y]=0010111.010 0111),已是规格化数

   [x-y]=0010111.100 0101=0010011.000 101 (尾数左规1次,阶码减1

4)舍入:

[x+y]=0010111.010 011(舍)

[x-y] 不变

5)溢出:无

则:x+y=2101×-0.101 101

x-y =2100×-0.111 011

27.已知x=0.11011 , y=-0.10101,用变形补码计算x+y,同时指出结果是否溢出。

解答: [x]补=00.11011  ,[y]补=11.01011

      [x]补      00.11011

+  [y]补      11.01011

                    00.00110

∴[x+y]补= 00.00110 ,未溢出 ,x+y = +0.00110   

28.已知x=11/16,  y=9/16,用变形补码计算x+y,同时指出结果是否溢出。

解答:x=11/16=0.1011,[x]补=00.1011

y=9/16=0.1001,[y]补=00.1001

      [x]补      00.1011

+  [y]补      00.1001

                   01.0100

        正溢出

29.某计算机的存储系统由Cache,主存和磁盘构成。Cache的访问时间为15ns;如果被访问的单元在主存中但不在Cache中,需要用60ns的时间将其装入Cache,然后再进行访问;如果被访问的单元不在主存中,则需要10ms的时间将其从磁盘中读入主存,然后再装入Cache中并开始访问。若Cache的命中率为90%,主存的命中率为60%,求该系统中访问一个字的平均时间?

解答:被访问的字在Cache中的概率为0.9

    不在Cache中但在主存中的概率为:(1-0.9)×0.6=0.06

    不在Cache也不在主存中的概率为:(1-0.9)×(1-0.6)=0.04

所以, 一个字的访问时间为:

15×0.9+(15+60)×0.06+(15+60+10×106) ×0.04

=13.5+4.5+400003

=400021(ns)

30.在一个分页虚存系统中,用户虚地址空间为32页,页长1KB,主存物理为16KB。已知用户程序有10页长,若虚页0、1、2、3已经被调入到主存8、7、4、10页中请问虚地址0AC5和1AC5(十六进制)对应的物理地址是多少?

解答:页长1KB,所以页内地址为10位。

主存物理页面数:16页,共14位地址码(其中页面号4位,页内地址10位)

用户虚地址空间:32页,页面号为031;共15位地址码(其中页面号5位,页内地址10位)。

0AC5H=00010,1011000101B,页面号为2,已被调入到主存页4,所以,物理地址中的页面号为4,页内地址与虚地址的页内地址相同,所以是:0100,1011000101=12C5H。

1AC5H=00110,1011000101B,页面号为6,未被调入到主存页中,所以无物理地址,会发生缺页中断。

31.某机字长32位,共有机器指令100条,指令单字长,等长操作码,CPU内部有通用寄存器32个,可作变址寄存器用,存储器按字节编址,指令拟用直接寻址、间接寻址、变址寻址和相对寻址等4种寻址方式。

① 分别画出4种不同寻址方式的单地址指令的指令格式。

② 采用直接寻址和间接寻址方式时,可直接寻址的存储器的空间各是多少?

③ 写出4种寻址方式下,有效地址EA的表达式。

解答:①指令格式如下图所示。

 直接寻址指令:

OP

地址值

间接寻址指令:

OP

地址值所在内存单元

变址寻址指令:

OP

地址偏移值

相对寻址指令:

OP

地址偏移值

②直接寻址时,由于指令操作码占用了其中7位,则剩余的(32–7=25)位表示指令的寻址范围。当按字节编址时,寻址范围为225 =32MB;使用间接寻址时,由于机器的字长为32位,所以可寻址范围为232 = 4GB。

③有效地址EA如下所示。

直接寻址:EA=指令中的地址码

间接寻址:EA=指令中地址码指示的内存单元中存放的有效地址

变址寻址:EA=变址寄存器中包含的地址值+指令中地址码所表示的偏移

相对寻址:EA=程序计数器中包含的地址值+指令中地址码所表示的偏移

32.在虚拟存储器中,若主存容量为4MB,页面容量为4 KB,程序地址空间为1GB.

(1)写出主存地址格式。(2)写出虚拟地址格式。(3)页表长度为多少?

解答:(1)主存地址格式为:

主存页号

10位

块内地址

12位

(2)虚拟地址格式为:

虚页号

18位

块内地址

12位

(3)页表长度为218=256K:

33. 将 – 58 表示成定点数和浮点数,

(1)写出其二进制定点数表示(11位补码表示,其中含数符1 位)

(2)写出其二进制浮点数表示(尾数补码表示取11 位,其中数符取1 位;阶码移码表示取5 位,其中含1位阶符)

解答:设x= –58,x 二进制形式:–111010,

       x定点表示为 –0000 111010, x浮点表示为 x= –(0.1110100000) ×2110,则:

        (1)其定点数补码表示为[x]补  =1 11110001 10 

        (2)其浮点数表示为= 1, 0110 ;1 0001 100000

34. 试证明[–y]­补=–[y]补。

解答:因为[0]­补=0,得

 [y]补+[–y]­补=[y+(-y)]补=[y-y]­补=[0]补=0

即: [–y]­补=–[y]补  

                                 

35.某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16MB,主存(物理)地址空间大小为1MB,页面大小为4KB;Cache采用直接映射方式,共8行;主存与 Cache之间交换的块大小为 32B。系统运行到某一时刻时,页表的部分内容和Cache的部分内容分别如a图、b图所示,图中页框号及标记字段的内容为十六进形式。

请回答下列问题。

(1)虚拟地址共有几位,哪几位表示页号?物理地址共有几位,哪几位表示页框号(物理页号)?

(2)使用物理地址访问Cache时,物理地址应划分成哪几个字段?要求说明每个字段的位数及在物理地址中的位置。

(3)虚拟地址001C60H所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否 Cache 命中?要求说明理由。

解答:(1)页面大小为4KB=212 B,故页内地址12位。虚拟地址空间大小为16MB=224B,虚拟地址为:

虚页号 12位

页内地址 12位

主存地址空间大小为1MB=220B,物理地址为:

页框号 8位

页内地址 12位

(2) Cache采用直接映射方式,共23行=8行;主存与 Cache之间交换的块大小为 25 B =32B,故Cache行(块)内地址5位。故Cache大小为32×8=256B=28B。

Cache地址为:

Cache行号3位

行内地址5位

主存(物理)地址空间大小为1MB=220B,直接映射下的主存物理地址为:

主存标记 12位

Cache行号 3位

行内地址  5位

(3)虚拟地址001C60H的低12位C60H为页内地址,高12位001H为虚页号。

查页表可知,虚页001H对应的有效位为1,故该页已调入主存,主存页号为04H,故主存地址为04C60H。

主存地址04C60H=000001001100 011 00000b的低5位00000b为行内地址,中间3位011b为Cache行号,查Cache标记可知,第3行的有效位为1,但标记为105H,故该地址Cache不命中。

36.设主存容量为1MB,Cache容量为16KB,块大小为512B,采用直接地址映象方式。

(1)写出Cache地址形式。

(2)写出主存地址格式。

(3)设块标记为6位,块表容量为多大?

(4)主存地址为CDE8FH的单元在Cache中的什么位置?

解答:(1)Cache容量为16KB=214,块大小为512B,块内地址为9位,Cache地址为:

Cache块地址(5位)

块内地址(9位)

(2)主存容量为1MB=220,块大小为512B,块内地址为9位,主存地址为:

主存标记(6位)

块地址(5位)

块内(9位)

  (3)Cache每一块在块表中有一项,块表单元有25,块表容量为:25×6位

  (4)主存地址CDE8FH=1100 1101 1110 1000 1111 单元在Cache中的地址为:01 111 0 1000 1111 。

37.某计算机的主存地址空间大小为256MB,按字节编址。指令Cache和数据Cache分离,均有8个Cache 行,每行大小为64B,数据 Cache 采用直接映射方式。现有两个功能相同的程序A和程序B,其C伪代码如下:

//程序A
int a[256][256];                    
    ……                               
int sum_array1() {                                 
    int i, j, sum = 0;                     
    for(i = 0; i < 256; i++)                
        for(j = 0; j < 256; j++)   
            sum += a[i][j];                     
    return sum;                          
} 
//程序B
int a[256][256];                    
    ……                               
int sum_array2() {                                 
    int i, j, sum = 0;                     
    for(j = 0; j < 256; j++)                
        for(i = 0; i < 256; i++)   
            sum += a[i][j];                     
    return sum;                          
} 

  假设int 类型数据用32位补码表示,程序编译时i,j,sum均分配在寄存器中,数组a 按行优先方式存放,其首地址为320(十进制)。请回答下列问题,要求说明理由或计算工程。

  1. 若不考虑用于Cache一致性维护和替换算法的控制位,则数据Cache的总容量是多少字节?
  2. 数组元素a[0][31]和a[1][1]各自所在主存块对应的Cache行号是多少?(Cache 行号从0 开始)
  3. 程序A和程序B的数据访问命中率是多少?哪个程序执行时间短?

解答:

(1)每个Cache行对应一个标记项,如下图:

有效位

脏位

替换控制位

标记位

不考虑用于Cache一致性维护和替换算法的控制位。地址为28位(228=256M)。数据Cache的总容量=8×64=512B=29 B,块内地址为6位 (26=64)Cache 块号3位(23=8)。

    标记位数=28- 3 – 6=19,有效位为1位,这样,标记和有效位占(19 + 1)×8/8=20B, Cache的总容量=为512 + 20 =532B

(2)主存地址格式:

标记位19位

块(行)号3位

块内地址6位

Cache地址格式:

块(行)号3位

块内地址6位

数组按行优先方式存放,其首地址为320,数字元素为4B.

a[0][31]在主存起始地址为:320 + 31*4=444(1 1011 1100)B, 即(110 111100)B, 则块号为6(110)。或444/64=6,Cache 行号=6 mod 8=6

      a[1][1]在主存起始地址为:320 +( 256+ 1)*4= 1348(10 101 000100) B, 则块号为5(101)。或块号=1348/64=21,Cache 行号=21 mod 8=5.

(3)程序A:

总访存次数=数组元素个数=256*256=216,每次对加载到 Cache某行中的第一个数据的访问都是不命中的cahce,所以未命中次数=占有内存块数=216*4/64=212;命中率=(216 - 212)/216=(1-1/16)=93.75%;

对于A程序: 1行Cache 占64B,每个int 数据元素占4 B,一行有16个数。第一个数因Cache缺失而不命中(强制性缺失),然后调入Cache,使得后面的15个int 数据元素全部命中,所以命中率为15/16=93.75%

    程序B:

数组每行为256个数据,占用256*4=1024B,共需要1024/64=16个 Cache 行(页),Cache 共 8 行。程序访问次序为:a[0][0]、a[1][0]、a[2][0]、a[3][0] ……,

Cache 的8行被依次加载数据为:a[0][0]~ a[0][15]、a[1][0]~ a[1][15] ……a[7][0]~ a[7][15]、当访问a[8][0]时,a[0][0]~ a[0][15]被替换,以此类推,每次访存都是不命中,命中率为0.

    程序A执行时间更短。

 38.有如下C语言程序段:

for(int k = 0; k < 1000; k++)
{
    a[k] = a[k] + 32;
}

   若数组a以及变量k均为int型,int型数据占4B,数据Cache采用直接映射方式,数据区大小是1KB,块大小是16B,该程序段执行前Cache为空,则该程序段执行过程中,访问数组a的Cache的缺失率?

解答:a[k]的访问步骤是:先访问Cache,若Cache缺失则从主存中取出一个块调入Cache,这个块中的后几个数据都是命中的。

本题中一个数据占4B,一个块大小是16B,一个块中有4个数据,读a[k]后加32 再写回a[k],这样一次循环要八次访问Cache,其中只有第一次是缺失的,后面七次都是命中的,所以缺失率是1/8=12.5%。

39.假设某计算机按字编址,Cache 有 4 个行,Cache 和主存之间交换的块为 1 个字。若 Cache 的内容初始为空,采用 2 路组相联映射方式和 LRU 替换算法。当访问的主存地址依次为 0,4,8,2,0,6,8,6,4,8 时,计算命中 Cache 的次数?要求有示意图。

解答:Cache 有4个行,2路组相联,即Cache 被分成2组,每组2行。主存地址为0〜1、4〜5、8〜9 可映射到第0组Cache 中,主存地址为2〜3、6〜7可映射到第1组Cache 中。

0,2,4,6,8的2进制表示分别为:0(0 0),2(1 0),4(1 0 0),6(1 10),8(10 00),访问的0,2,4,6,8字若在Cache有副本,则副本是在 Cache的第0、1、0、1、0组中任意页,映射和替换如下图所示:

序号

1

2

3

4

5

6

7

8

9

10

主存地址

0

4

8

2

0

6

8

6

4

8

组号

0

0

0

8

8

8

8

8*

8

8

8*

4

4

4

0

0

0

0

4

4

1

2

2

2

2

2

2

2

6

6

6*

6

6

是否命中

×

×

×

×

×

×

×

命中率=3/10=30%

本题假定Cache 行号高位为组号,蒋本珊所编教材按此方式

40.有一 Cache系统,字长为16位,主存容量为16字×256块,Cache容量为16字×8块,采用全相联映射。

(1)主存和Cache容量各位多少字节?主存和 Cache的字地址各为多少?

(2)若原先已经依次装入了5块信息,问字地址338H所在的主存块将装入Cache 块的块号和在Cache中的字地址是多少?

(3)若块表中地址为1的行中标记着36H的主存块号标志,Cache 块号为5H,则在CPU送来主存的字地址为368H时是否命中?若命中,此时Cache的字地址为多少?

解答:(1)主存容量=16×256×2B=8192B=213,Cache容量=16×8×2B=256B=28,所以主存字地址=213/21=12位, 主存字地址=28/21=7位,如下:

主存地址:

主存块号

8位

块内地址

4位

Cache地址:

Cache块号

3位

块内地址

4位

(2)每块大小为16个字, 字地址338H所在的主存块号为33H,由于是全相联映象,原先已装入的5块依次在0~4号块,因此主存的33H块装入Cache的第5块。对应的Cache字地址为101 1000B,其中101为块号,1000为块内地址。

(3) 由于块表中地址为1的行中标记着36H的主存块号标志,则当CPU送来主存地址为368H时,其主存块号为36H,所以命中,Cache的块号为5(101) ,此时的Cache字地址为58H。

41.假定数组元素按行优先方式存储,M、N都是2048,按字节编址,每个数组元素占4个字节。对于下面的两个函数:

//程序A
int sumaaryrows(int a[M][N])
{
    int i, j, sum = 0;
    for (i = 0; i < M, i++)
        for (j = 0; i < N, j++)
            sum += a[i][j];
    return sum;
}
//程序B
int sumaaryrows(int a[M][N])
{
    int i, j, sum = 0;
    for (j = 0; j < N, j++)
        for (i = 0; i < M, i++)
            sum += a[i][j];
    return sum;
}

(1)对于数组a的访问,哪个空间局部性更好?哪个时间局部性更好?

(2)对于指令访问来说, for 循环体的空间局部性和时间局部性如何?

解答:

(1)对于数组a, 程序 A和程序B的空间局部性相处较大。

     程序A对数组a的访问顺序为:

a[0][0], a[0][1] , …,a[0][2047]  ;

a[1][0], a[1][1] , …,a[1][2047]  ;

          …

      由此可见,数据访问顺序与存放顺序是一致的,空间局部性好。

程序B对数组a的访问顺序为:

a[0][0], a[1][0] , …,a[2047][0]  ;

a[0][0], a[1][1] , …,a[2047][1]  ;

          …

      由此可见,数据访问顺序与存放顺序不一致,每次访问都要跳过2048个元素,即8190字节,若主存与 Cache交换单位小于8KB,则每访问1个数组元素都需要装入1个主存块到Cache 中,没有空间局部性。

      两个程序的时间局部性都较差,因为每个数组元素都只被访问1次。

(2)对于for 循环体,程序 A和程序B的访问局部性都是一样的。因为循环体内指令按序连续存放的,所以空间局部性好。

内循环体被连续重复执行了2048×2048次,所以时间局部性也好。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有为肥宅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值