位置:51電子網(wǎng) » 技術(shù)資料 » 汽車電子

      子程序調(diào)用與返回指令

      發(fā)布時間:2014/6/5 21:10:51 訪問次數(shù):2584

         1.絕對調(diào)用

         絕對調(diào)用指令A(yù)CALL是一條兩字節(jié)指令, AD536AJDZ指令提供了11位目標(biāo)地址addrll,所以和前面AJMP指令相似,其調(diào)用地址必須與ACALL指令的下一條指令首字節(jié)位于程序存儲器的同一個2KB區(qū)內(nèi)。ACALL指令與AJMP指令不同的是它需要保存子程序的返回地址,

      而AJMP指令不用。

         指令執(zhí)行過程是:執(zhí)行ACALL指令時,PC+2后獲得了下一條指令的地址,然后把PC的當(dāng)前值壓棧(棧指針SP加l,PC低字節(jié)進棧,SP再加l,PC高字節(jié)進棧)。最后把PC的高5位和指令給出的11位地址addrll連接組成16位目標(biāo)地址(PCis~11aio~ao),并作為

      子程序入口地址送入PC中,使CPU轉(zhuǎn)向執(zhí)行子程序。因此,所調(diào)用的子程序入口地址必須和ACALL揩令下一條指令的第一個字節(jié)在同一個2KB區(qū)域的程序存儲器空間,否則就調(diào)用不到了。

         2.長調(diào)用指令

         LCALL addr16(長調(diào)用指令)

          可以在64KB程序存儲器內(nèi)調(diào)用子程序的指令,它是三字節(jié)指令。指令執(zhí)行過程是:把PC加3獲得的下一條指令的地址進棧(先壓入低字節(jié),后壓入高字節(jié)),進棧操作使SP加l兩次。接著把指令的第二和第三字節(jié)(a15~a8,a7~ao)分別裝入PC的高位和低位字節(jié)中,然后從該地址addr16(ais~a o)開始執(zhí)行子程序。

         3.子程序返回

         這條返回指令的功能是從堆棧中取出斷點地址,送給PC,并從斷點處開始繼續(xù)執(zhí)行程序。RET應(yīng)放在一般子程序的末尾。

         4.中斷返回   

         這條返回指令的功能也是從堆棧中取出斷點地址,送給PC,并從斷點處開始繼續(xù)執(zhí)行程序。RETI應(yīng)放在中斷服務(wù)子程序的末尾。在執(zhí)行RETI指令時,還將清除MCS-51中斷響應(yīng)時所置位的優(yōu)先級狀態(tài)觸發(fā)器,開放中斷邏輯,使得已申請的較低級中斷源可以響應(yīng)。且必須在RETI指令執(zhí)行完之后,至少要再執(zhí)行一條指令才能響應(yīng)這個中斷。



         1.絕對調(diào)用

         絕對調(diào)用指令A(yù)CALL是一條兩字節(jié)指令, AD536AJDZ指令提供了11位目標(biāo)地址addrll,所以和前面AJMP指令相似,其調(diào)用地址必須與ACALL指令的下一條指令首字節(jié)位于程序存儲器的同一個2KB區(qū)內(nèi)。ACALL指令與AJMP指令不同的是它需要保存子程序的返回地址,

      而AJMP指令不用。

         指令執(zhí)行過程是:執(zhí)行ACALL指令時,PC+2后獲得了下一條指令的地址,然后把PC的當(dāng)前值壓棧(棧指針SP加l,PC低字節(jié)進棧,SP再加l,PC高字節(jié)進棧)。最后把PC的高5位和指令給出的11位地址addrll連接組成16位目標(biāo)地址(PCis~11aio~ao),并作為

      子程序入口地址送入PC中,使CPU轉(zhuǎn)向執(zhí)行子程序。因此,所調(diào)用的子程序入口地址必須和ACALL揩令下一條指令的第一個字節(jié)在同一個2KB區(qū)域的程序存儲器空間,否則就調(diào)用不到了。

         2.長調(diào)用指令

         LCALL addr16(長調(diào)用指令)

          可以在64KB程序存儲器內(nèi)調(diào)用子程序的指令,它是三字節(jié)指令。指令執(zhí)行過程是:把PC加3獲得的下一條指令的地址進棧(先壓入低字節(jié),后壓入高字節(jié)),進棧操作使SP加l兩次。接著把指令的第二和第三字節(jié)(a15~a8,a7~ao)分別裝入PC的高位和低位字節(jié)中,然后從該地址addr16(ais~a o)開始執(zhí)行子程序。

         3.子程序返回

         這條返回指令的功能是從堆棧中取出斷點地址,送給PC,并從斷點處開始繼續(xù)執(zhí)行程序。RET應(yīng)放在一般子程序的末尾。

         4.中斷返回   

         這條返回指令的功能也是從堆棧中取出斷點地址,送給PC,并從斷點處開始繼續(xù)執(zhí)行程序。RETI應(yīng)放在中斷服務(wù)子程序的末尾。在執(zhí)行RETI指令時,還將清除MCS-51中斷響應(yīng)時所置位的優(yōu)先級狀態(tài)觸發(fā)器,開放中斷邏輯,使得已申請的較低級中斷源可以響應(yīng)。且必須在RETI指令執(zhí)行完之后,至少要再執(zhí)行一條指令才能響應(yīng)這個中斷。



      熱門點擊

       

      推薦技術(shù)資料

      頻譜儀的解調(diào)功能
          現(xiàn)代頻譜儀在跟蹤源模式下也可以使用Maker和△Mak... [詳細]
      版權(quán)所有:51dzw.COM
      深圳服務(wù)熱線:13692101218  13751165337
      粵ICP備09112631號-6(miitbeian.gov.cn)
      公網(wǎng)安備44030402000607
      深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
      付款方式


       復(fù)制成功!
      亚洲av综合在线手机版_日韩av无码精品专区_婷婷五月无码在线观看_老子影院午夜精品无码_中文字幕一区二区精品区