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