问答题 某双总线模型机如图所示。双总线分别记为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); }
【答案解析】