1. 程式人生 > >中斷與函式呼叫的區別

中斷與函式呼叫的區別

在《微機原理》和《計算機組成》等課程[1-4]教學中(本文以MCS-51微控制器為例),中斷過程既是教學難點又是教學重點,它與主程式呼叫子程式過程有一定相似性,但又有很大區別,呼叫子程式過程相對比較容易掌握,通過把兩過程結合起來,採用比較教學方法,能收到了很好的教學效果。 
1、兩過程定義與作用
    子程式是微機基本程式結構中的1種,基本程式結構包括順序(簡單)、分支(判斷)、迴圈、子程式和查表等5種。
    子程式是一組可以公用的指令序列,只要給出子程式的入口地址就能從主程式轉入子程式。子程式在功能上具有相對的獨立性,在執行主程式的過程中往往被多次呼叫,甚至被不同的程式所呼叫。一般微機首先執行主程式,碰到呼叫指令就轉去執行子程式,子程式執行完後,返回指令就返回主程式斷點(即呼叫指令的下一條指令),繼續執行沒有處理完的主程式,這一過程叫做(主程式)呼叫子程式過程。
子程式結構可簡化程式,防止重複書寫錯誤,並可節省記憶體空間。計算機中經常把常用的各種通用的程式段編成子程式,提供給使用者使用。使用者在自己編寫的程式中,只要會呼叫這些子程式,就可大大簡化使用者程式設計的困難。 
    中斷是計算機中央處理單元CPU與外設I/O交換資料的一種方式,除此方式外,還有無條件、條件(查詢)、存貯器直接存取DMA和I/O通道等四種方式。由於無條件不可靠,條件效率低,DMA和I/O通道兩方式硬體複雜,而中斷方式CPU效率高,因此一般大多采用中斷方式。
中斷概念是當計算機正在執行某一(主)程式時,收到一中斷請求,如果中斷響應條件成立,計算機就把正在執行的程式暫停一下,去響應處理這一請求,執行中斷服務程式,處理完服務程式後,中斷返回指令使計算機返回原來還沒有執行完的程式斷點處繼續執行,這一過程稱為中斷過程。有了中斷,計算機才能具有並行處理,實時處理和故障處理等重要功能。 
2、兩過程的聯絡與區別
2.1聯絡
    中斷與呼叫子程式兩過程屬於完全不同的概念,但它們也有不少相似之處。兩者都需要保護斷點(即下一條指令地址)、跳至子程式或中斷服務程式、保護現場、子程式或中斷處理、恢復現場、恢復斷點(即返回主程式)。兩者都可實現巢狀,即正在執行的子程式再調另一子程式或正在處理的中斷程式又被另一新中斷請求所中斷,巢狀可為多級。
正是由於這些表面上的相似處,很容易使學生把兩者混淆起來,特別是把中斷也看為子程式,這就大錯特錯了。
2.2區別
    中斷過程與呼叫子程式過程相似點是表面的,從本質上講兩者是完全不一樣的。
兩者的根本區別主要表現在服務時間
與服務物件不一樣上。首先,呼叫子程式過程發生的時間是已知和固定的,即在主程式中的呼叫指令(CALL)執行時發生主程式呼叫子程式,呼叫指令所在位置是已知和固定的。而中斷過程發生的時間一般的隨機的,CPU在執行某一主程式時收到中斷源提出的中斷申請時,就發生中斷過程,而中斷申請一般由硬體電路產生,申請提出時間是隨機的(軟中斷髮生時間是固定的),也可以說,呼叫子程式是程式設計者事先安排的,而執行中斷服務程式是由系統工作環境隨機決定的;其次,子程式完全為主程式服務的,兩者屬於主從關係,主程式需要子程式時就去呼叫子程式,並把呼叫結果帶回主程式繼續執行。而中斷服務程式與主程式兩者一般是無關的,不存在誰為誰服務的問題,兩者是平行關係;第三,主程式呼叫子程式過程完全屬於軟體
處理過程,不需要專門的硬體電路,而中斷處理系統是一個軟、硬體結合系統,需要專門的硬體電路才能完成中斷處理的過程;第四,子程式巢狀可實現若干級,巢狀的最多級數由計算機記憶體開闢的堆疊大小限制,而中斷巢狀級數主要由中斷優先順序數來決定,一般優先順序數不會很大。