白中英 计算机组成原理考研真题答案课后答案复习重点网课视频

一、单项选择题:140小题,每小题2分,共80分。下列每题给出的四个选项中,只有一个选项符合题目要求。请在答题卡上将所选项的字母涂黑。

1.已知程序如下:

intSintn

{

returnn<0? 0 : sn-1+n;

}

voidmain()

{

cout<<S1;

}

程序运行时使用栈来保存调用过程的信息,自栈底到栈顶保存的信息依次对应的是(  )。

Amain(  )->S1->S0

BS0->S1->main(  )

Cmain(  )->S0->S1

DS1->S0->main(  )

【答案】A查看答案

【解析】函数Sintn)是一个递归函数:当实际参数小于等于零时则返回0,并终止递归;当实际参数大于零时则递归调用Sn-1),并将Sn-1)的结果加上n作为返回值。程序从main(  )函数开始,首先调用main(  )函数;在main(  )函数中调用S1)函数时,将main(  )函数的上下文保存到栈中,并进入函数S1);由于函数S1)的实际参数大于零,需要调用S0),故将S1)函数的上下文保存到栈中,进入S0);在S0)中,实际参数小于等于零,递归终止。

2.先序序列为abcd的不同二叉树的个数是(  )。

A13

B14

C15

D16

【答案】B查看答案

【解析】二叉树的先序遍历定义为:若二叉树为空,则空操作;否则,访问根节点,然后先序遍历左子树,最后先序遍历右子树。本题中,结点a为二叉树的根节点,左右子树的先序遍历可能存在下面四种情况:左子树为空,bcd为右子树;②b为左子树,cd为右子树;③bc为左子树,d为右子树;④bcd为左子树,右子树为空。然后将左右子树继续分解,如第种情况的右子树先序遍历(bcd)可能有:a.左子树为空,右子树为cdb.左子树为c,右子树为dc.左子树为cd,右子树为空。按照这种方法继续分解左右子树,直到不能再分解为止,可得第种情况各包含5种不同情况,第种情况各包含2种情况,因此总共有14种不同的二叉树。

3.下列选项给出的是从根分别到达两个叶节点路径上的权值序列,能属于同一棵哈夫曼树的是(  )。

A2410524107

B2410524127

C241010241411

D2410524146

【答案】D查看答案

【解析】哈夫曼树是带权路径长度最短的二叉树。由根节点出发到两个叶子节路径中,第二个被访问的两个结点的权值要么相等,要么和为根节点的权值,故B项错误。同理,通过第三个被访问的节点排除A项。C项,由两条路径可推出三个叶子节点的权值分别是:31011,而根据哈夫曼树的定义可知,权值为3的节点应该和权值为10的结点结合,故C项错误。D项,反推出有四个叶子节点,权值分别为:5568,满足哈夫曼树的条件。

4.现在有一颗无重复关键字的平衡二叉树(AVL树),对其进行中序遍历可得到一个降序序列。下列关于该平衡二叉树的叙述中,正确的是(  )。

A.根节点的度一定为2

B.树中最小元素一定是叶节点

C.最后插入的元素一定是叶节点

D.树中最大元素一定是无左子树

【答案】D查看答案

【解析】二叉树的中序遍历定义是若二叉树为空,则空操作;否则:中序遍历左子树;访问根节点;中序遍历右子树A项错误,当树中仅有一个或者两个结点时,根节点的度就可能不为2B项错误,树中最小元素是中序遍历时最后访问的节点,当没有右子树时,最后访问的节点是根节点;C项错误,当最后插入的元素破坏树的平衡后,树会进行调整,使其成为中间节点;D项正确,由中序遍历的特点可知,左子树的值大于根节点,所以最大元素一定没有左子树。

5.设有向图G=(VE),顶点集V{V0V1V2V3},边集E{<V0, V1><V0, V2><V0, V3><V1, V3>},若从顶点V0开始对图进行深度优先遍历,则可能得到的不同遍历序列个数是(  )。

A2

B3

C4

D5

【答案】D查看答案

【解析】根据题意知有向图的结构如图所示。深度优先遍历的特点是尽可能先对纵深方向进行搜索,所以可能得到的不同遍历序列分别是:①V0→V2→V1→V3②V0→V2→V3→V1③V0→V1→V3→V2④V0→V3→V2→V1⑤V0→V3→V1→V2


6.暂缺

7.下列选项中,不能构成折半查找中关键字比较序列的是(  )。

A500200450180

B500450200180

C180500200450

D180200500450

【答案】A查看答案

【解析】折半查找的过程是:先确定待查找记录所在的范围,然后逐步缩小范围直到找到或找不到该记录为止。折半查找的关键字序列满足:对每一个关键字,其后面的所有关键字序列或者都小于等于该关键字或者都大于等于该关键字。A项错误,第三次比较的关键字为450,说明待查关键字位于200450间,所以第四次比较时不会遇到关键字180

8.已知字符串S“abaabaabacacaabaabcc”,模式串t“abaabc”,采用KMP算法进行匹配,第一次出现失配s[i]!t[i])时,ij5,则下次开始匹配时,ij的值分别是(  )。

Ai1j0

Bi5j0

Ci5j2

Di6j2

【答案】C查看答案

【解析】模式匹配(KMP)算法对普通的暴力匹配的改进在于:每当匹配过程中匹配失败时,主串(本题为S)的指针(i)不需要回溯,而是利用已经得到的部分匹配的结果将模式串(t)向右滑动尽可能远的一段距离后,继续进行比较。模式串滑动的距离是由模式串(t)本身决定的,即t的子串t[0…j-1]中前缀串和后缀串相等的最长长度。本题中第一次失配i5,字串为“abaab”,其相等且最长的前后缀为“ab”,一次下一个j2

9.下列排序算法中元素的移动次数和关键字的初始排列次序无关的是(  )。

A.直接插入排序

B.起泡排序

C.基数排序

D.快速排序

【答案】C查看答案

【解析】C项,基数排序是采用分配和收集实现的,不需要进行关键字的比较。ABD三项都依赖关键字的比较,不同的初始排列次序下元素移动的次数有很大变化,最好情况元素正序,则不用移动,最坏情况元素反序,则需要移动nn-1/2次(n为元素个数)。

10.已知小根堆为8151021341612,删除关键字8之后需重建堆,在此过程中,关键字之间的比较数是(  )。

A1

B2

C3

D4

【答案】C查看答案

【解析】堆排序中,依次输出堆顶的最小值,然后重新调整堆,如此反复执行,便得到一个有序序列。本题中,删除堆顶元素8后将最后一个元素12置于堆顶,然后调整堆:首先与15比较,12小于15,所以不用交换;然后与10比较,因为10小于12,所以交换1012的位置;调整后12再与16比较,12小于16,调整堆过程结束。因此12共与151016进行了三次比较。

11.希尔排序的组内排序采用的是(  )。

A.直接插入排序

B.折半插入排序

C.快速排序

D.归并排序

【答案】A查看答案

【解析】希尔排序基本思想是:先将整个待排元素序列按某个增量分割成若干个子序列,在子序列内进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。

12.计算机硬件能够直接执行的是(  )。

.机器语言程序.汇编语言程序.硬件描述语言程序

A.仅

B.仅ⅠⅡ

C.仅ⅠⅢ

DⅠⅡⅢ

【答案】A查看答案

【解析】机器语言是计算机唯一可以直接执行的语言。汇编语言属于低级语言,但其源程必须要翻译成目标程序成为机器语言程序后才能被直接执行。硬件描述语言是电子系统硬件行为描述、结构描述、数据流描述的语言。

13.由3“1”5“0”组成的8位二进制补码,能表示的最小整数是(  )。

A-126

B-125

C-32

D-3

【答案】B查看答案

【解析】能表示的最小整数一定是负数,符号位占用1“1”;负数的补码和原码的转化是:原码符号位不变,数值部分按位取反,末位加“1”。因此最小的整数的补码是“10000011”,原码为“11111101”,即-12510

14.下列有关浮点数加减运算的叙述中,正确的是(  )。

.对阶操作不会引起阶码上溢或下溢

.右规和尾数舍入都可能引起阶码上溢

.左规时可能引起阶码下溢

.尾数溢出时结果不一定溢出

A.仅ⅡⅢ

B.仅ⅠⅡⅣ

C.仅ⅠⅢⅣ

DⅠⅡⅢⅣ

【答案】D查看答案

【解析】浮点数的加减运算步骤包括:对阶,使两个操作数的小数点位置对齐,阶码小的尾数右移,可能产生溢出,但是阶码不会溢出;尾数求和,将对阶后的尾数按定点数加(减)运算规则运算;规格化,包括左规和右规,左规时阶码减少,可能出现阶码下溢,而右规时,阶码增加可能出现阶码上溢;舍入,该过程可能需要右规调整,因此可能出现阶码上溢;溢出判断,浮点数的溢出与否是由阶码的符号决定的,而不是由尾数溢出判断的,因此尾数溢出时结果不一定溢出。因此ⅠⅡⅢⅣ均正确。

15.假定主存地址为32位,按字节编址,主存和Cache之间采用直接映射方式,主存块大小为4个字,每字32位,采用回写(WriteBack)方式,则能存放4K字数据的Cache的总容量的位数至少是(  )。

A146k

B147K

C148K

D158K

【答案】B查看答案

【解析】Cache和主存直接映射方式的规则为:主存储器分为若干区,每个区与缓存容量相同;每个区分为若干数据块,每个块和缓存块容量相同;主存中某块只能映象到Cache的一个特定的块中。本题中,Cache总共存放4K字数据,块大小为4个字,因此cache被分为4K/41K个块,由10位表示。块内共16字节,所以由4位表示,于是标记位为32-10-1418位。所以,Cache的每一行需要包含所存的数据4个字,每个字32位,18位标记位和一个有效位,因此总容量为:(4*32 + 18 + 1*1K147K

16.假定编译器将赋值语句“xx+3转换为指令”addxaddt3”,其中xaddtx对应的存储单元地址,若执行该指令的计算机采用页式虚拟存储管理方式,并配有相应的TLB,且Cache使用直写(WriteThrough)方式,则完成该指令功能需要访问主存的次数至少是(  )。

A0

B1

C2

D3

【答案】C查看答案

【解析】采用页式虚拟存储管理方式时,若页表全部放在内存中,则存取一个数据最少要访问两次内存:第一次是访问页表,得到所存取的数据或指令的物理地址;第二次根据该地址存取数据或指令。在配有TLB的页式虚拟管理方式中,如果给出的地址在TLB中,则直接根据该地址取数据或指令,仅需要一次访问内存。Cache使用直写方式时,计算完需要将数据写回到内存中,因此完成整个指令功能至少需要访问主存2次。

17.下列存储器中,在工作期间需要周期性刷新的是(  )。

ASRAM

BSDRAM

CROM

DFLASH

【答案】B查看答案

【解析】动态随机存储器(DRAM)是利用存储元电路中栅极电容上的电荷来存储信息的,电容上的电荷一般只能维持12ms,因此即使电源不掉电,信息也会自动消失。为此,每隔一定时间必须刷新。

18.某计算机使用4体交叉存储器,假定在存储器总线上出现的主存地址(十进制)序列为800580068007800880018002800380048000,则可能发生发生缓存冲突的地址对是(  )。

A80048008

B80028007

C80018008

D80008004

【答案】D查看答案

【解析】交叉存储器,又称低位交叉编址,即低位地址为体号,高位地址为体内地址。本题中,主存地址对应的体号分别是:123412344。地址为80048000都是存取的四号储存器,可能导致8004存储还未完成而又存取8000地址,因此可能发生缓存冲突。

19.下列有关总线定时的叙述中,错误的是(  )。

A.异步通信方式中,全互锁协议最慢

B.异步通信方式中,非互锁协议的可靠性最差

C.同步通信方式中,同步时钟信号可由多设备提供

D.半同步通信方式中,握手信号的采样由同步时钟控制

【答案】C查看答案

【解析】A项正确,异步通信方式中,全互锁协议最慢,主从模块都需要等待确认后才能撤销其信号;B项正确,异步通信方式中,非互锁协议没有相互确认机制,因此可靠性最差;C项错误,同步通信要遵循统一的时钟信号,不能由多设备提供;D项正确,半同步通信方式中,握手信号的采样由同步时钟控制。

20.若磁盘转速为7200/分,平均寻道时间为8ms,每个磁道包含1000个扇区,则访问一个扇区的平均存取时间大约是(  )。

A8.1ms

B12.2ms

C16.3ms

D20.5ms

【答案】B查看答案

【解析】磁盘的平均寻址时间包括平均寻道时间和平均等待时间。平均寻道时间为8ms,平均等待时间与磁盘转速有关,为[60s/7200]*0.5≈4.165ms。磁盘的存取一个扇区的时间为60s/7200 * 1000≈ 0.0083ms。因此总的时间为:8 + 4.165 + 0.0083 = 12.1733ms

21.在采用中断I/O方式控制打印输出的情况下,CPU和打印控制接口中的I/O端口之间交换的信息不可能是(  )。

A.打印字符

B.主存地址

C.设备状态

D.控制命令

【答案】B查看答案

【解析】I/O接口的功能包括:选址功能;传送命令功能;传送数据功能;反映I/O设备工作状态功能。A项为数据,C项为设备状态,D项为命令。B项,主存地址在中断方式控制下是不需要的,因此,它不可能是CPU和打印控制接口中的I/O端口之间交换的信息。

22.内部异常(内中断)可分为故障(fault)、陷阱(trap)和终止(abort)三类。下列有关内部异常的叙述中,错误的(  )。

A.内部异常的产生与当前执行指令相关

B.内部异常的检测由CPU内部逻辑实现

C.内部异常的响应发生在指令执行过程中

D.内部异常处理后返回到发生异常的指令继续执行

【答案】D查看答案

【解析】内中断分为:由软中断指令启动的中断;在一定条件下由CPU自身启动的中断。D项错误,如突然掉电引发的内中断经处理后不会继续执行。

23.处理外部中断时,应该由操作系统保存的是(  )。

A.程序计数器(PC)的内容

B.通用寄存器的内容

C.快表(TLB)的内容

DCache中的内容

【答案】B查看答案

【解析】外部中断处理过程首先要保护现场,使得中断处理完后能够恢复程序的状态继续执行。保护现场有两个含义:由中断隐指令保存程序的断点(程序计数器);由中断服务程序保存通用寄存器和状态寄存器的内容。中断服务程序是操作系统的一部分。

24.假定下列指令已装入指令寄存器。则执行时不可能导致CPU从用户态变为内核态(系统态)的是(  )。

ADIVR0R1;(R0/R1→R0

BINTn;产生软中断

CNOTR0;寄存器R0的内容取非

DMOVR0addr;把地址处的内存数据放入寄存器R0

【答案】C查看答案

【解析】A项,除法操作出现除数为零的情况时,会产生内中断,CPU切换为内核态进行中断处理;B项,直接产生中断,会切换到内核态;D项,addr出现非法地址,会出现中断,进而切换到内核态。

25.下列选项中会导致进程从执行态变为就绪态的事件是(  )。

A.执行Pwait)操作

B.申请内存失败

C.启动I/0设备

D.被高优先级进程抢占

【答案】D查看答案

【解析】D项,被高优先级进程抢占,进程会由执行态变为就绪态。ABC三项,程序由于缺少资源而由执行态转为阻塞态。

26.若系统S1采用死锁避免方法,S2采用死锁检测方法,下列叙述中正确的是(  )。

.S1会限制用户申请资源的顺序

.S1需要进行所需资源总量信息,而S2不需要

.S1不会给可能导致死锁的进程分配资源,S2

A.仅ⅠⅡ

B.仅ⅡⅢ

C.仅ⅠⅢ

DⅠⅡⅢ

【答案】C查看答案

【解析】死锁避免的策略是:必须知道将来的资源需求,以寻找可能的安全允许顺序,如果不存在安全序列就阻塞;死锁检测的策略是:只要允许就分配资源,它指定期检查死锁是否已经发生,如果发生就通过剥夺解除死锁。两种方式都需要所需资源的总量信息,但S1是用于在分配资源时判断是否会导致死锁,而S2是用于检测是否出现死锁。

27.系统为某进程分配了4个页框,该进程已访问的页号序列为2029342823845,若进程要访问的下一页的页号为7,依据LRU算法,应淘汰页的页号是(  )。

A2

B3

C4

D8

【答案】B查看答案

【解析】LRU置换算法是选择最近最久未使用的页面予以淘汰。进程有4个页框,题中访问过程中页框的变化如下:

序列:  2 0 2 9 3 4 2 8 2 3 8 4 5

页框:  2 2 0 0 0 2 9 3 3 4 4 2 3

0 2 2 2 9 3 4 4 8 2 3 8

9 9 3 4 2 8 2 3 8 4

3 4 2 8 2 3 8 4 5

淘汰:  09 2

访问页号为7的页时,内存中存在的页的页号是:3845,根据LRU定义应淘汰的是3

28.在系统内存中设置磁盘缓冲区的主要目的是(  )。

A.减少磁盘I/O次数

B.减少平均寻道时间

C.提高磁盘数据可靠性

D.实现设备无关性

【答案】A查看答案

【解析】访问磁盘的开销远远大于访问内存的开销。磁盘缓冲区便是利用主存中的存储空间,来暂存从磁盘中读出(或写入)的信息,频繁使用的一部分磁盘数据和信息,暂时存放在磁盘缓存中,可减少访问磁盘的次数。

29.在文件的索引节点中存放直接索引指针10个,一级二级索引指针各1个,磁盘块大小为1KB。每个索引指针占4个字节。若某个文件的索引节点已在内存中,到把该文件的偏移量(按字节编址)为1234307400处所在的磁盘块读入内存。需访问的磁盘块个数分别是(  )。

A12

B13

C23

D24

【答案】B查看答案

【解析】文件的索引结点的直接索引指针有10个,因此直接索引的偏移量范围是02559,一级索引的偏移量范围是256065791,二级索引访问的偏移量范围是6579245183907。偏移量1234可以通过直接索引得到在磁盘块的地址,因此需要一次访问,307400需要通过二级索引查找其在磁盘的位置,需要分别访问存放二级索引的两个索引块以及对应的数据块。

30.在请求分页系统中,页面分配策略与页面置换策略不能组合使用的是(  )。

A.可变分配,全局置换

B.可变分配,局部置换

C.固定分配,全局置换

D.固定分配,局部置换

【答案】C查看答案

【解析】分配和置换策略有下面三个组合:固定分配、局部置换;可变分配、全局置换;可变分配、局部置换。固定分配是指基于进程的类型(交互型或批处理型等),或根据程序员、程序管理员的建议,为每个进程分配一定数目的物理块,在整个运行期间都不再改变,采用该策略时,如果进程在运行中发现缺页,则只能从该进程在内存的n个页面中选出一个页换出,然后再调入一页,才能保证分配给该进程的内存空间不变,因此不能有固定分配,全局置换组合。

3140.暂缺

二、综合应用题:4147小题,共70分。

41.(9分)用单链表保存m个整数,节点的结构为(datalink),且|data|nn为正整数)。现要求设计一个时间复杂度尽可能高效地算法,对于链表中绝对值相等的节点,仅保留第一次出现的节点而删除其余绝对值相等的节点。

例如若给定的单链表head如下


删除节点后的head


要求

1)给出算法的基本思想

2)使用cc++语言,给出单链表节点的数据类型定义。

3)根据设计思想,采用cc++语言描述算法,关键之处给出注释。

4)说明所涉及算法的时间复杂度和空间复杂度。

答:1)算法思想:

定义一个大小为n的布尔数组flag,初始时所有的元素都赋值为false,用来标识遍历过程中是否出现元素绝对值为flag的节点。然后遍历链表,遍历过程中,每一个当前结点data域的绝对值所对应的flag位:若为真,则删除该结点;若为假(false),则将flag位置为真(true)。

2)节点的数据结构定义如下:


3boolflag[n];  //全局数组标志节点的绝对值是否出现过

Node * deleteABSEnqualNodeNode * head

{

memsetflag, false, sizeofflag));

Node *prehead;

Node *phead->next;

whilep !NULL{

ifflag[absp->data]{ //如果此绝对值已经在节点值的绝对值中出现过则删除该节点

 pre->nextp->next;

 deletep;

 ppre->next;

} else {//否则,将flag中对应的位置置为true,并将指针指向下一个元素

flag[absp->data]true;

pp->next;

}

}

returnhead;

}

4)只遍历一次链表,所以时间复杂度为Om)(m为单链表中元素的个数),申请大小为n的数组,所以空间复杂度为On)(n为节点绝对值的最大值)。

42.(11分)已知有5个顶点的图G如下图所示


请回答下列问题

1)写出图G的邻接矩阵A(行、列下标从0开始)。

2)求A2,矩阵A2中位于03列元素值的含义是什么?

3)若已知具有nn>2)个顶点的邻接矩阵为B,则Bm2<m<n)非零元素的含义是什么?

答:1)邻接矩阵为


2A2为:


03列的元素的含义是顶点0到顶点3间是相通的,并且路径长度为2的路径有2条。

3Bm中非零元素的含义是:假设此顶点位于ij列,表示从i结点到j结点路径长度为m的路径的条数。。

43.(12分)某16位计算机主存按字节编码。存取单位为16位;采用16位定长指令格式;CPU采用单总线结构,主要部分如下图所示。图中R0R3为通用寄存器;T为暂存器;SR为移位寄存器,可实现直送(mov)、左移一位(left)、右移一位(right3种操作,控制信号为SropSR的输出信号Srout控制;ALU可实现直送Amova)、ABadd)、ABsub)、ABand)、ABor)、非Anot)、A1inc7种操作,控制信号为ALUop


请回答下列问题。

1)图中哪些寄存器是程序员可见的?为何要设置暂存器T

2)控制信号ALUopSRop的位数至少各是多少?

3)控制信号Srout所控制部件的名称或作用是什么?

4)端点中,哪些端点须连接到控制部件的输出端?

5)为完善单总线数据通路,需要在端点中相应的端点之间添加必要的连线。写出连线的起点和终点,以正确表示数据的流动方向。

6)为什么二路选择器MUX的一个输入端是2

答:1)图中程序员可见的寄存器有通用寄存器R0R3和程序计数器PC;当执行算术或逻辑操作时,由于ALU本身是没有内部存储功能的组合电路,因此如要执行加法运算,被相加的两个数必须在ALU的两个输入端同时有效,因此设置暂存器T用于暂存数据总线发送的数据。

【解析】程序员可见的寄存器包括:程序计数器、通用寄存器和状态寄存器。其他的IRMARMDR等是CPU的内部工作寄存器,对程序员不可见。

2ALUopSRop的位数分别为32

【解析】ALU中共有7种命令,用三位即可区别表示,SR共有三种命令二位二进制即可表示。

3Srout所控制的部件是状态字寄存器,用来存放ALUCPU的指令状态。

4)须连接到控制部件的输出端端点有①②③⑤⑧

【解析】操作符命令,传输等都需要控制信号进行控制。

5⑥→⑨⑦→④

6)数据宽度是16位,以字节编址,输入端是2是为了增加地址获取ALU的第二个操作数。

44.(10分)题43中描述的计算机,其部分指令执行过程的控制信号如如题44a所示。


44a部分指令控制信号

该机指令格式如题44b所示,支持寄存器直接和寄存器间接两种寻址方式,寻址方式位分别为01,通用寄存器R0R3的编号分别为0123


44b指令格式

请回答下列问题。

1)该机的指令系统最多可定义多少条指令?

2)假定incshlsub指令的操作码分别为01H02H03H,则以下指令对应的机器代码各是什么?

①incR1R1+1→R1

②shlR2R1;(R1<<1→R2

③subR3,(R1),R2;((R1))R2→R3

3)假定寄存器X的输入和输出控制信号分别为XinXout,其值为1表示有效,为0表示无效(例如,PCout1表示PC内容送总线);存储器控制信号为MEMop,用于控制存储器的读(read)和写(write)操作。写出题44a中标号①⑧处的控制信号或控制信号的取值。

4)指令“subR1R3,(R2“incR1”的执行阶段至少各需要多少个时钟周期?

答:1128

【解析】支持两种寻址方式,使用1位标识,四个寄存器,使用2位标识,因此对于每一个操作数需要3位,每条指令三个操作数,一条指令总共16位,因此剩余7位,所以可以定义27条指令。

2①0240H②0464H③06EEH

【解析】“incR1R1是直接寻址的单地址指令,代码是“0000001001 000 000”,前面七位是操作码(01H),001是第一个操作数地址(R1);

“shlR2R1;(R1<<1→R2”R1是间接寻址,R2是直接寻址,代码是“0000010010 101 000”,前面七位是操作码(02H),010是第一个操作数地址(R2),101是第二个操作数地址;

“subR3,(R1),R2;((R1))R2→R3”R1R2是间接寻址,R3是直接寻址,代码是“000011011 101 110”,前面七位是操作码(03H),011是第一个操作数地址(R3),101是第二个操作数地址,110是第三个操作数地址。

3①0②mov③mova④left⑤read⑥sub⑦mov⑧Srout

4)至少各需要81个时钟周期。

【解析】在一个时钟周期内CPU仅完成一个动作。

subR1R3,(R2);(R3((R2))→R1执行周期的微操作序列是:

T0R3→MAR

T1MMAR→MDR

T2MDR→R3

T3R2→MAR

T4MMAR→MDR

T5MDR→MAR

T6MMAR→MDR

T7R3+MDR→R1

所以至少需要8个时钟周期。

incR1R1+1→R1执行周期的微操作序列是:

T0R1+1→R1

所以至少需要1个时钟周期。

45.(15分)有AB两人通过信箱进行辩论,每人都从自己的信箱中取得对方的问题。将答案和向对方提出的新问题组成一个邮件放入对方的邮箱中,设A的信箱最多放M个邮件,B的信箱最多放N个邮件。初始时A的信箱中有x个邮件(0<x<M),B中有y个(0<y<N)。辩论者每取出一个邮件,邮件数减1.

AB两人操作过程:

CodeBegin

A{

WhileTRUE{

A的信箱中取出一个邮件;

回答问题并提出一个新问题;

将新邮件放入B的信箱;

}

}

B{

WhileTRUE{

B的信箱中取出一个邮件;

回答问题并提出一个新问题;

将新邮件放入A的信箱;

}

}

CodeEnd

当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。

当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。

请添加必要的信号量和PV(或waitsigned)操作,以实现上述过程的同步,要求写出完整过程,并说明信号量的含义和初值。

答:首先定义两个互斥信号量:mutexAmutexB,初始时为1,分别用来实现对A的邮箱和B的邮箱的互斥使用;然后针对A的邮箱再定义两个信号量emptyAfullA,初值分别为M–xx,分别表示信箱中仍能存放信的数量和已经存放的信的数量,同理设置emptyBfullB,初值为N–yy

初始代码:

SemaphoremutexA1mutexB1

SemaphoreemptyAM–xfullAx

SemaphoreemptyBN–y,fullBy

通信代码:

CodeBegin

A

whileTRUE) {

PfullA;

PmutexA;

A的信箱中取出一个邮件;

VmutexA;

VemptyA;

回答问题并提出一个新问题;

PemptyB;

PmutexB;

将新邮件放入B的信箱;

VmutexB;

VfullB;

}

}

B{

WhileTRUE{

PfullB;

PmutexB;

B的信箱中取出一个邮件;

VmutexB;

VemptyB;

回答问题并提出一个新问题;

PemptyA;

PmutexA;

将新邮件放入A的信箱;

VmutexA;

VfullA;

}

}

CodeEnd

4647.暂缺

2014年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合真题及详解

一、单项选择题:140小题,每小题2分,共80分。下列每题给出的四个选项中,只有一个选项是符合题目要求的。

1.下列程常段的时间复杂度是(  )

count0;

fork1;k<n; k*2

forj1;j<n;j+1

count++;

AOlog2n

BOn

COnlog2n

DOn2

【答案】C查看答案

【解析】外部循环的退出条件是k>n,而对于k,每次循环都执行kk*2,所以循环次数为log2n;内部循环的退出条件是j>n,对于j,每次循环都执行jj+1,所以每次循环次数为n次。所以此程序段的时间复杂度为Onlog2n),即选C

2.假设栈初始为空,将中缀表达式转换为等价后缀表达式的过程中,当扫描到f时,栈中的元素依次是(  )

A

B

C

D

【答案】B查看答案

【解析】中缀表达式转后缀表达式遵循以下原则:

1)遇到操作数,直接输出;

2)栈为空时,遇到运算符,入栈;

3)遇到左括号,将其入栈;

4)遇到右括号,执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,

左括号不输出;

5)遇到其他运算符"+""-""*""/"时,弹出所有优先级大于或等于该运算符的栈顶

元素,然后将该运算符入栈;

6)最终将栈中的元素依次出栈,输出。

所以扫描到’/’,入栈描到’+’,由于’+’优先级比’/’低,所以将’/’弹出,’+’入栈;扫描到’*’,优先级比’+’高,入栈;扫描到‘,入栈;扫描到’-‘,将栈中优先级更高的’*’弹出,‘-’ 入栈;扫描到’*’,优先级比’-‘高,入栈。所以扫描到f的时候,栈中元素为:

3.循环两列放在一维数组A[0…M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素。初始时为空,下列判断队空和队满的条件中,正确的是(  )

A.队空:end1==end2;队满:end1==(end2+1modM

B.队空:end1==end2;  队满:end2==(end1+1modM-1

C.队空:end2==(end1+1modM ;  队满:end1==(end2+1modM

D.队空:end1==(end2+1modM;  队满:end2==(end1+1modM-1

【答案】A查看答案

【解析】在循环队列中,在少用一个元素空间的前提下,可约定入队前,测试尾指针在循环意义下加1后是否等于头指针,若相等,则队满。而队空的条件还是首尾指针是否相等。

4.若对如下的二叉树进行中序线索化,则结点x的左、右线索指向的结点分别是(  )

Ae,c

Be,a

Cd,c

Db,a


关键词:计算机组成原理