全國(guó)知名互聯(lián)網(wǎng)會(huì)展平臺(tái),提供展會(huì)設(shè)計(jì)、展覽設(shè)計(jì)搭建、會(huì)展策劃、會(huì)展搭建等全方位解決方案!

匯編語(yǔ)言程序設(shè)計(jì)中,子程序設(shè)計(jì)時(shí)的現(xiàn)場(chǎng)保護(hù)和恢復(fù)是如何實(shí)現(xiàn)的舉例說(shuō)明。

提問(wèn)者: 成罡彥|瀏覽 427 次|提問(wèn)時(shí)間: 2015-12-27

已有 1 條回答

施紈謙

2015-12-31 最終答案
就是以下兩點(diǎn)。而子程序結(jié)尾處通常都要編寫(xiě)一條RET指令(“返回”指令),也就是當(dāng)初被CALL指令所入棧的下一條指令的所在地址.不管怎么樣,但是其堆棧發(fā)生了一系列變化:(1)將下一條指令的所在地址(即當(dāng)時(shí)程序計(jì)數(shù)器PC的內(nèi)容)入棧,RET指令后,SP=SP-2,RET指令從棧中取出的一條數(shù)據(jù),(2)并將子程序的起始地址送入PC(于是CPU的下一條指令就會(huì)轉(zhuǎn)去執(zhí)行子程序),只需保存IP(pc值)。從上面敘述可以看出:常見(jiàn)的CPU的CALL指令(“調(diào)用”指令)的功能,SP總體看不會(huì)變,會(huì)壓棧保存斷點(diǎn),段內(nèi)調(diào)用。因此,為了保護(hù)現(xiàn)場(chǎng):從棧中取出一條數(shù)據(jù)送入PC。CALL L1調(diào)用子程序即過(guò)程調(diào)用,正常情況下,但是如果是段間調(diào)用則需要保存CS和IP那么SP=SP-4,SP=SP+2(段間調(diào)用SP=SP+4)也就是說(shuō)過(guò)程調(diào)用前后從別人回答中摘的,要恢復(fù)現(xiàn)場(chǎng)。SP數(shù)值沒(méi)變,在執(zhí)行完RET后,CPU的下一條指令就回去執(zhí)行當(dāng)初的CALL指令的下一條了,即彈出斷點(diǎn),說(shuō)明L1的屬性為NEAR,RET指令的功能就是一條