什麼的子程式只執行不返回

2022-12-21 15:36:09 字數 1594 閱讀 8834

1樓:

void 型別的,過程不會返回

2樓:匿名使用者

我仔細看了一下所有人的回答,有根本沒看懂樓主問題答非所問的,也有回答的差不離的,我來切一下重點好了。

樓主這所有問題其實歸根結底就是乙個問題,堆疊和sp(堆疊指標)的問題

call指令執行時,就是先把當前程式指標壓入堆疊並使sp加1,然後開始執行call指令呼叫的子程式,當遇到ret指令時,把前面壓入堆疊的程式指標取出並sp減1(出棧),然後就回到call程式呼叫前位置了。

jmp指令並不會把程式指標壓入堆疊更不會影響sp(當然自己在jmp後用push指令除外)。自然call呼叫後使用jmp指令跳轉,最後遇到ret指令一樣能回到call程式呼叫前位置。就算你在jmp指令後使用push指令,只要和pop成對出現,還是會回到呼叫前的位置,不成對?

這堆疊不能這麼用的。。飛了。。飛了。

中斷其實和call指令時一樣的道理,至於用reti就如張庚(3樓)兄弟說的中斷是要多處理一些標誌位。

至於呼叫call多少次出錯,這還是堆疊和sp的問題。

如我上面所寫,call指令一次就得壓棧一次,而你在ret指令前又來一次call指令,那麼還得壓一次,這樣一直下去堆疊指標愈來愈大,就會占用程式所要使用的ram位址,自然肯定會出錯,一半51微控制器預設sp為07h,而一般程式設計ram位址20h開始就會被程式占用,一算就知道了,大概10幾20次吧,如果你中間還是用堆疊那麼就少點,如果你的程式占用ram的位址靠後那麼就多點,不過一般夠用是肯定的了

微控制器裡中斷返回和子程式返回的區別是什麼? 5

3樓:可以叫我表哥

中斷服務子程式入口位址相對某一中斷是固定的,呼叫子程式的偏移位址是隨機的,基本過程差不多,返回時,中斷服務子程式用的是reti 呼叫子程式是ret。

呼叫中斷服務子程式和呼叫子程式都會把當前偏移位址的下一位址壓棧,但呼叫子程式的返回指令ret不影響標誌位,reti從中斷程式返回,並會清除內部相應的中斷狀態暫存器。

4樓:

基本沒有區別!都會在返回時恢復壓棧的pc指標並繼續執行程式。

中斷處理程式實際上也可以看做是乙個普通的子程式,只是它的呼叫是預先設定的位址入口,並且它的呼叫時由中斷觸發的;而子程式是我們人為地呼叫的。

但是中斷子程式的返回有時要考慮對中斷的處理(如開關中斷允許、初始化資料-----比如計數器或者定時器的初始值處理等等)。

5樓:蔥要吃魚

中斷是微控制器的乙個重要功能,中斷子程式專為執行中斷功能,它是在發生中斷後,自動執行的,不需要主程式呼叫;子程式要主程式呼叫才能執行。

6樓:匿名使用者

中斷返回後繼續執行斷點以後的程式,子程式返回其實是在編譯時把子程式插在主調程式之中,執行完子程式後順序執行後面的程式而已。

組合語言中如果呼叫完了子程式,那麼子程式回不回被接下來又被順序執行?

7樓:匿名使用者

一般主程式都是無限迴圈的,不會往下執行的。

8樓:匿名使用者

一般不會的。但強烈的干擾會使程式跑飛,這時有可能。

微控制器裡中斷返回和子程式返回的區別是什麼

中斷服務子程式入口位址相對某一中 斷是固定的,呼叫子程式的偏移位址是隨機的 專,基本過程差不多,返回時屬,中斷服務子程式用的是reti呼叫子程式是ret。呼叫中斷服務子程式和呼叫子程式都會把當前偏移位址的下一位址壓棧,但呼叫子程式的返回指令ret不影響標誌位,reti從中斷程式返回,並會清除內部相應...

FORTRAN的子程式能返回複數嗎

當然沒問題 給你個例子看專屬看 在fortran語言中描述乙個複數,但是實部是變數,怎麼寫 za cmplx zr zi 這樣就可以了 fortran怎樣輸入複數?比如3 2i program www fcode cn implicit none complex c read c write c e...

只隱藏工作列的程式圖示,不隱藏視窗,就是程式還在執行,我還在操作它,但是工作列上不顯示它。系統win

還是哥來哇,我是為隱藏攝像,有點齷齪了,自己搜windowhider,我win8.1支援,就是介面不好看,你要是隱藏遊戲什麼的難,只能隱藏工作列不顯示。我倒是有這樣的軟體 但不支援win8 從不在工作列顯示突變 如何把工作列的圖示隱藏,但是程式還在執行,比如那個向日葵,win7 64位的 親上圖 沒...