在內存中開辟棧保護區,對中斷現場進行保護,然而在C中這些工作編譯器已經做了,但是匯編要自己做保護。值得注意的是PC指針的低位已經壓入硬件棧中無需保護,只需要保護當前的狀態字和累加器還有高位的PC指針值就好了,有的堆棧可以用PUSH和POP處理,有的卻只能開辟內存,但是他們的共同點就是都會對PC指針壓棧處理,不這樣也談不上跳轉和斷點了,由此可見用匯編寫一段保護代碼也是很慎重的事情,當然取決于自己的想法,對就是對,錯就是錯,事實騙不了人吧我想。有些重要的變量在中斷現場也應該做保護,這就看需要,這只是最基本的,對于用匯編寫程序來說沒有什么函數和變量,無窮無盡的地址,內存是地址,程序也是地址,局部變量全局變量的分配釋放都是自己控制,函數也是地址等等,用匯編編寫驅動是極好的,因為控制非常精準,精確到每條指令,非常接近與物理狀態,但是用匯編編寫算法就........,就算是一個很簡單的算法,就夠折騰好一會的,程序的靈魂是算法,故而還是選擇C語言吧,但是學點匯編是絕對沒有壞處的,匯編使你看到的計算機更加的清晰。夫鵠不日浴而白,烏不日黔而黑!不知鵠歟而或烏歟?嘻!
;///////////////////////// Interrupt_Handler_Start///////////////////////////////////***********************************************
;/////////////////////////////////////////////////////////////***********************************************
INTEERUPUT_HIGHT:
MOVWF W_TEMP
SWAPF STATUS,0
CLRF STATUS
MOVWF STATUS_TEMP ;中斷現場壓入內存
MOVF PCLATH,0
MOVWF PCLATH_TEMP
CLRF PCLATH
;............(中斷程序的核心部分)
;choose branch
;............(中斷程序的核心部分)
MOVF PCLATH_TEMP,0
MOVWF PCLATH
SWAPF STATUS_TEMP,0
MOVWF STATUS; ;中斷現場彈出內存
SWAPF W_TEMP,1;
SWAPF W_TEMP,0;
RETURN
;/////////////////////////Interrupt_Handler end///////////////////////////////////***********************************************
;/////////////////////////////////////////////////////////////***********************************************
|