子程序調(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)這個中斷。
上一篇:條件轉(zhuǎn)移類指令
上一篇:匯編語言程序設(shè)計
熱門點擊
- E2PROM
- 皂化作用
- PCB定位孔和夾持邊的設(shè)置
- 子程序調(diào)用與返回指令
- Sn系焊料與Ni/Au(ENIG)焊盤焊接的
- 典型表面組裝方式
- 片外 RAM
- PQFN焊盤設(shè)計結(jié)構(gòu)
- 三維堆疊POP (Package On Pa
- MCS-51指令的取指/執(zhí)行時序
推薦技術(shù)資料
- 頻譜儀的解調(diào)功能
- 現(xiàn)代頻譜儀在跟蹤源模式下也可以使用Maker和△Mak... [詳細]
- 全新高端射頻儀器
- 集成32位RISC-V處理器&
- 第三代半導(dǎo)體和圖像傳感器 參數(shù)封裝應(yīng)用
- 汽車半導(dǎo)體
- 人形機器人技術(shù)結(jié)構(gòu)設(shè)計及發(fā)展分
- 紫光芯片云3.0整體解決方案
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究