調用指令的用法?
子程序調用指令的格式為操作碼和目的地址。子程序調用指令的目的地址是子程序的首地址。子程序調用指令用于實現程序與程序之間的轉移,與轉移指令不同(轉移指令用于實現同一程序內的轉移)。子程序調用指令還可以進行嵌套調用,即可調用別的子程序,還可以實現遞歸調用,即直接或間接自己調用自己。
在程序的執行過程中,當需要執行子程序時,可以在主程序中發出子程序調用指令,而當子程序執行完畢后,給出子程序的入口地址,控制程序的執行序列從主程序轉入子程序;而子程序執行完畢后,可以利用返回指令返回主程序,使得程序重新返回主程序發出子程序調用指令的地方,繼續順序執行。在執行調用指令,通常采用堆棧來保存返回地址,即把下一條指令的地址壓入堆棧中保存,子程序執行完畢后,由返回指令壓入堆棧的返回地址從堆棧中彈出,返回調用程序。
轉子指令和返回指令
在子程序的調用與返回過程中,子程序的入口地址是指子程序第一條指令的地址。用于調用子程序、控制程序的執行從主程序轉向子程序的指令稱為專注指令(子程序調用指令、過程調用指令)。為了正確調用子程序,必須在轉子指令中給出子程序的入口地址。主程序中轉子指令的下一條指令的地址稱為斷點,斷點是子程序返回主程序的返回地址,從子程序返回主程序的指令稱為返回指令。為了在執行返回指令時能夠正確地返回主程序,轉子指令應具有保護斷點的功能。執行轉子指令時保護斷點的方式有多種,常用的有:將斷點保存到子程序第一條指令的前一個字單元;將斷點保存到某一約定的寄存器中;將斷點壓入堆棧。轉子指令和返回指令通常都是無條件的,但也有帶條件的轉子指令和返回指令。條件轉子指令和條件返回指令所需要的條件與轉移指令的條件類似。
有關術語
子程序是一個大型程序中的某部分代碼,由一個或多個語句塊組成。它負責完成某項特定任務,而且相較于其他代碼,具備相對的獨立性。一般會有輸入參數并有返回值,提供對過程的封裝和細節的隱藏。這些代碼通常被集成為軟件庫。
主程序,也稱主函數,在許多命令式程序設計語言里,主函數(main function)是程序開始運行的地方。而相對地,其它編程范式的語言中就很少會有這樣一個概念。
遞歸是一個函數、過程或者數據結構,如果在它們定義的內部又出現有定義本身的應用,則稱它們是遞歸的,或者是遞歸定義的。例如,一個過程的某一步要用到它自身的上一步的結果。遞歸調用就是在當前的函數中調用當前