1 回答

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊
不同的CPU可能有不同的規(guī)定。下面只說常見的簡單CPU的指令。
常見的CPU的CALL指令(“調(diào)用”指令)的功能,就是以下兩點(diǎn):
(1)將下一條指令的所在地址(即當(dāng)時(shí)程序計(jì)數(shù)器PC的內(nèi)容)入棧,
(2)并將子程序的起始地址送入PC(于是CPU的下一條指令就會(huì)轉(zhuǎn)去執(zhí)行子程序)。
而子程序結(jié)尾處通常都要編寫一條RET指令(“返回”指令),RET指令的功能就是一條:
從棧中取出一條數(shù)據(jù)送入PC。
從上面敘述可以看出,正常情況下,RET指令從棧中取出的一條數(shù)據(jù),也就是當(dāng)初被CALL指令所入棧的下一條指令的所在地址。
因此,RET指令后,CPU的下一條指令就回去執(zhí)行當(dāng)初的CALL指令的下一條了。
至于其他操作,如sweetsugar123兄所說的“保護(hù)寄存器現(xiàn)場”等等,一般并非CALL指令的功能,而是需要程序員自行在子程序內(nèi)編寫程序?qū)崿F(xiàn)的。這些操作通常也需要用到堆棧?;诙褩5摹昂筮M(jìn)先出”性質(zhì),這些操作可以不干擾CALL和RET指令的“保存返回地址”的功能。
添加回答
舉報(bào)