问答题
某双总线模型机如图所示。双总线分别记为B1和B2;图中连线的方向标明数据通路及流向,并注有相应的控制信号(微命令);A、B、C、D为4个通用寄存器;X为暂存器;M为多路选择器,用于选择进入暂存器x的数据,存储器为双端口,分别面向总线B1和B2。
问答题
写出该模型机的取指令周期流程。
【正确答案】控制器的取指令周期流程大思路大体都是差不多的,但需要根据具体情况具体分析。该模型机的取指令周期流程如下:
(PC)→AR1 //将PC中的内容通过B1总线送到AR1地址寄存器中
M(AR1)→DR1 //根据地址寄存器AR1的内容,选择读取相应的内存单元并将数据送至DR1数据寄存器中
DR1→IR //将DR1的内容通过B1总线送到IR指令寄存器中;至此取指令过程完成
【答案解析】[解析] 本题主要考查的是关于CPU内部双总线方式的数据通路和控制信号的一些知识,并结合考查了指令中操作数的寻址方式的知识。
问答题
分别指出指令ADD(A),(B)中源操作数和目的操作数的寻址方式,并写出该指令的执行流程。
【正确答案】由括号可知,指令ADD(A),(B)中源操作数和目的操作数的寻址方式都为寄存器间址寻址方式,即寄存器中存放操作数的地址。该指令的执行流程如下:
(A)→AR1 //将寄存器A中的内容通过总线B1送到AR1地址寄存器
(B)→AR2 //将寄存器B中的内容通过总线B2送到AR2地址寄存器
M(AR1)→DR1 //根据地址寄存器AR1的内容,选择读取相应的内存单元并将数据送至DR1数据寄存器中
M(AR2)→DR2 //根据地址寄存器AR2的内容,选择读取相应的内存单元并将数据送至DR2数据寄存器中
(DR1)→x //将DR1中的内容通过B1总线送至X暂存器
(X)+B2→DR1 //通过ALU算术逻辑单元将寄存器X中的内容与总线B2上的内容相加,并通过总线B1送至数据寄存器DR1
(DR1)→M(AR1) //把DR1中的内容写至AR1寄存器的内容所指定的内存单元中
【答案解析】
问答题
分别指出指令ADD(A),#N中源操作数的寻址方式,并写出该指令的执行流程。
【正确答案】由#号可知源操作数的寻址方式为立即寻址方式,该指令的执行流如下:
(A)→AR1 //将寄存器A中的内容通过总线B1送到AR1地址寄存器
M(AR1)→DR1 //根据地址寄存器AR1的内容,选择读取相应的内存单元并将数据送至DR1数据寄存器中
(DR1)→X //将DR1中的内容通过B1总线送至X暂存器
N→B2 //将立即数N送至.B2总线上
(X)+B2→DR1 //通过ALU算术逻辑单元将寄存器x中的内容与总线B2上的内容相加,并通过总线B1送至数据寄存器DR1
(DR1)→M(ARl) //把DR1中的内容写至AR1寄存器的内容所指定的内存单元中
【答案解析】
问答题
写出指令JMP Label(该指令完成(PC)+N→(PC),其中N为指令提供的位移量)的执行流程。
【正确答案】指令JMP Labe1的执行流程分别如下:
(PC)→C //将PC的内容通过总线B1送至暂存器X
N→B2 //将立即数N送至B2总线上
(X)+B2→PC //通过ALU算术逻辑单元将寄存器X中的内容与总线B2上的内容相加,并通过总线B1送至程序计数器PC
注:跳转指令是通过改变程序计数器(PC)中的值来实现指令跳转的。
【答案解析】
问答题
给出一个单车道的简易桥,如图所示。
【正确答案】本题是基于读者一写者问题衍生出来的题目,可以看成是两批互斥的读者,且对于正在读的读者数目有限制。理解每个信号量的意义后,再看进程描述。
int east count=0; //记录东端获得上桥许可的车辆数
int west count=0; //记录西端获得上桥许可的车辆数
semaphore meast=1; //实现对east count的互斥访问
semaphore mwest=1; //实现对west count的互斥访问
semaphore scount=5; //桥的剩余载重信号量
semaphore mutex=1; //实现东西两端车辆互斥上桥
Process east(i)(i=1,2,3…) //东端车辆过桥进程
{
P(meast);
if(east_count==0) //第一辆东端来车
P(mutex); //申请东端车辆上桥
east count++; //获得上桥许可的东端车辆数增1
V(meast);
P(scount); //可同时上桥的车辆数减1
Cross the Bridge;
V(scount); //可同时上桥的车辆数增1
P(meast);
east count--; //获得上桥许可的东端车辆数减1
if(east count==0) //最后一辆获得上桥许可的车辆已过桥
V(mutex); //允许西端车辆上桥
V(meast);
}
Process west(i)(i=1,2,3…) //西端车辆过桥进程,注释参照east(i)
{
P(mwest);
if(west Count==0)
P(mutex);
west_count++;
V(mwest);
P(scount);
CrosS the Bridge;
V(scount);
P(mwest);
west_count--;
if(west count==0)
V(mutex);
V(mwest);
}
【答案解析】