12 .已知某小型机字长为16 位,其双操作数指令的格式如下:
其中:OP 为操作码,R 为通用寄存器地址。试说明下列各种情况下能访问的最大主存区域有多少机器字? (1) A 为立即数。
(2) A 为直接主存单元地址。 (3) A 为间接地址(非多重间址) 。
(4) A 为变址寻址的形式地址,假定变址寄存器为R1 (字长为16 位) 。
解:(1) 1 个机器字。
(2) 256 个机器字。 (3) 65536 个机器字。 (4) 65536 个机器字。
13 .计算下列4 条指令的有效地址(指令长度为16 位) 。
(1) 000000Q(2) 100000Q(3) 170710Q(4) 012305Q
16 .举例说明哪几种寻址方式除去取指令以外不访问存储器? 哪几种寻址方式除去取指令外只需访问一次存储器? 完成什么样的指令,包括取指令在内共访问4 次存储器?
解:除去取指令以外不访问存储器:立即寻址,寄存器寻址。
除去取指令外只需访问一次存储器:直接寻址,寄存器间接寻址,变址寻址,基址寻址,相对寻址,页面寻址。
二级间接寻址包括取指令在内共访问4 次存储器。
17 .设相对寻址的转移指令占两个字节,第一个字节是操作码,第二个字节是相对位移量,用补码表示。假设当前转移指令第一字节所在的地址为2000H ,且CPU 每取一个字节便自动完成(PC) + 1 → PC 的操作。试问当执行JMP *+ 8 和JMP *- 9 指令( 倡为相对寻址特征)时,转移指令第二字节的内容各为多少? 转移的目的地址各是什么?
解:转移指令第二字节的内容分别为:00001000(+8),11110111(-9) 转移的目的地址分别为:200AH ,1FF9H 。
20.什么叫主程序和子程序? 调用子程序时还可采用哪几种方法保存返回地址? 画图说明调用子程序的过程。
解:主程序就是指通常的程序,而子程序是一组可以公用的指令序列,只要知道子程序的入口地址就能调用它。
保存返回地址的方法有多种:
(1) 用子程序的第一个字单元存放返回地址。转子指令把返回地址存放在子程序的第一个字单元中,子程序从第二个字单元开始执行。返回时将第一个字单元地址作为间接地址,采用间址方式返回主程序。 (2) 用寄存器存放返回地址。转子指令先把返回地址放到某一个寄存器中,再由子程序将寄存器中的内容转移到另一个安全的地方。 (3) 用堆栈保存返回地址。
调用子程序的过程如图3唱8 所示,此时返回地址保存在堆栈中。
21 .在某些计算机中,调用子程序的方法是这样实现的:转子指令将返回地址存入子程序的第一个字单元,然后从第二个字单元开始执行子程序,请回答下列问题: (1) 为这种方法设计一条从子程序转到主程序的返回指令。 (2) 在这种情况下,怎么在主、子程序间进行参数的传递? (3) 上述方法是否可用于子程序的嵌套?
(4) 上述方法是否可用于子程序的递归(即某个子程序自己调用自己) ? (5) 如果改用堆栈方法,是否可实现(4) 所提出的问题?
解:(1) 返回指令通常为零地址指令。返回地址保存在堆栈中,执行返回指令时自动从堆栈中弹出。而目前返回地址是保存在子程序的第一个单元中,故此时返回指令不能再是零地址指令了,而应当是一地址指令。如:
间接寻址可找到返回地址,然后无条件转移到返回的位置。
(2) 在这种情况下,可利用寄存器或主存单元进行主、子程序间的参数传递。
(3) 可以用于子程序的嵌套(多重转子) 。因为每个返回地址都放在调用的子程序的第一个单元中。
(4) 不可以用于子程序的递归,因为当某个子程序自己调用自己时,子程序第一个单元的内容将被破坏。 (5) 如果改用堆栈方法,可以实现子程序的递归,因堆栈具有后进先出的功能。
第四章
1 .证明在全加器里,进位传递函数
。
解:并行加法器中的每一个全加器都有一个从低位送来的进位和一个传送给较高位的进位。进位表达式为
欲证明
,也就是要证明
用卡诺图法,图4-10(a)和4-10(b)分别是两个逻辑表达式的卡诺图。两个卡诺图相同,两个逻辑表达式就相等,则进位传递函数的两种形式相等。
2 .某加法器采用组内并行、组间并行的进位链,4 位一组,写出进位信号C6 的逻辑表达式。
3 .设计一个9 位先行进位加法器,每3 位为一组,采用两级先行进位线路。
4 .已知X 和Y ,试用它们的变形补码计算出X + Y ,并指出结果是否溢出。 (1) X = 0 .11011 ,Y = 0 .11111 (2) X = 0 .11011 ,Y = - 0 .10101 (3) X = - 0 .10110 ,Y = - 0 .00001 (4) X = - 0 .11011 ,Y = 0 .11110