1、Day5: 堆栈相关指令的设计与调试 1. 设计目标为 CPU扩充 PUSH、 POP、 CALL、 RET指令,完成微程序设计。2. 设计任务( 1)编写 PUSH和 POP指令的微程序,并用下面的调机程序验证。 ORG 0030HMOV #0041H, R0PUSH R0PUSH 0040HPOP (R0)POP R1P55 PUSH指令的 EXECvPUSH OPR (SP)-1SP, OPR(SP) 例: PUSH #1234H ; #1234 (SP) PUSH 0040H ; (0040H) (SP) PUSH R3 ; (R3) (SP) v实际上是双操作数的传送相当于 MOV
2、OPR, (SP)OPR的本质是源,但是作为单操作数指令,只有取目的操作数阶段PUSH指令的执行阶段目的操作数 (A)DR AALUSHIFTDRPUSH指令的执行阶段(SP)-1SP ; OPR(SP) SPAALUSHIFTAALUSHIFTSPAR(SP)-1SP ; OPR(SP) PUSH指令的执行阶段(SP)-1SP ; OPR(SP)AR DRMMPUSH指令的执行阶段PUSH指令的微程序vP56表 2.12堆栈操作指令的 EXECvPOP OPR (SP)OPR, (SP)+1SP例: POP R3 ; (SP) (R3) POP 0040H ; (SP) (0040H) POP #1234H ; (SP) #1234 v实际上是双操作数的传送相当于 MOV (SP), OPROPR是目的操作数, FDC中取到 A的数是没用的,有用的只是 AR中指定的内存地址(若操作数位于内存)保存目的操作数有效地址 (AR)TRARTRPOP指令的EXEC先将 AR中存放的目的地址保护于 TR暂存器,待读出栈顶数据(源)后再将内存地址恢复SPA(SP)OPR, (SP)+1SPPOP指令的EXECAR