(1152301Q (2074013Q (3161123Q (4140011Q
解:(1152301Q =1101010011000001
因为Bit10(I2=1,故为变址寄存器2寻址,EA =(I2+A =0 63215+ 301=063516Q 。
(2074013Q =0111100000001011
因为Bit11(I1=1,故为变址寄存器1寻址,EA =(I1+A =0 02543+ 013=002556Q 。
(3161123Q =1110001001010011
因为Bit9(Z/C=1,故为当前页寻址,EA =(PC//A =00412 3Q 。 (4140011Q =1100000000001001
因为4个标志位均为0,故为直接寻址,EA =A =000011Q 。
16.举例说明哪几种寻址方式除去取指令以外不访问存储器?哪几种寻址方式除去取指令外只需访问一次存储器?完成什么样的指令,包括取指令在内共访问4次存储器?
解:除去取指令以外不访问存储器:立即寻址,寄存器寻址。除去取指令外只需访问一次存储器:直接寻址,寄存器间接寻址,变址寻址,基址寻址,相对寻址,页面寻址。二级间接寻址包括取指令在内共访问4次存储器。
17.设相对寻址的转移指令占两个字节,第一个字节是操作码,第二个字节是相对位移量,用补码表示。假设当前转移指令第一字节所在的地址为2000H ,且CPU 每取一个字节便自动完成(PC+1→PC 的操作。试问当执行JMP 倡+8和JMP 倡-9指令(倡为相对寻址特征时,转移指令第二字节的内容各为多少?转移的目的地址各是什么?
解:转移指令第二字节的内容分别为:00001000(+8,111101 11(-9转移的目的地址分别为:200AH ,1FF9H 。
18.什么叫主程序和子程序?调用子程序时还可采用哪几种方法保存返回地址?画图说明调用子程序的过程。
解:主程序就是指通常的程序,而子程序是一组可以公用的指令序列,只要知道子程序的入口地址就能调用它。保存返回地址的方法有多种:
(1用子程序的第一个字单元存放返回地址。转子指令把返回地址存放在子程序的第一个字单元中,子程序从第二个字单元开始执行。返回时将第一个字单元地址作为间接地址,采用间址方式返回主程序。
(2用寄存器存放返回地址。转子指令先把返回地址放到某一个寄存器中,再由子程序将寄存器中的内容转移到另一个安全的地方。
(3用堆栈保存返回地址。
19.在某些计算机中,调用子程序的方法是这样实现的:转子指令将返回地址存入子程序的第一个字单元,然后从第二个字单元开始执行子程序,请回答下列问题:
(1为这种方法设计一条从子程序转到主程序的返回指令。 (2在这种情况下,怎么在主、子程序间进行参数的传递? (3上述方法是否可用于子程序的嵌套?
(4上述方法是否可用于子程序的递归(即某个子程序自己调用自己? (5如果改用堆栈方法,是否可实现(4所提出的问题?
解:(1返回指令通常为零地址指令。返回地址保存在堆栈中,执行返回指令时自动从堆栈中弹出。而目前返回地址是保存在子程序的第一个单元中,故此时返回指令不能再是零地址指令了,而应当是一地址指令。如:JMP @子程序首地址间接寻址可找到返回地址,然后无条件转移到返回的位置。
(2在这种情况下,可利用寄存器或主存单元进行主、子程序间的参数传递。 (3可以用于子程序的嵌套(多重转子。因为每个返回地址都放在调用的子程序的第一个单元中。
(4不可以用于子程序的递归,因为当某个子程序自己调用自己时,子程序第一个单元的内容将被破坏。
(5如果改用堆栈方法,可以实现子程序的递归,因堆栈具有后进先出的功能
相关推荐: