2012-09-17 46 views
7

असेंबली भाषा में हमारे पास डॉस इंटरप्ट INT 21h है, जो एक हार्डवेयर बाधा नहीं है।क्या असेंबली में कस्टम इंटरप्ट बनाना संभव है?

मैं सोच रहा था कि क्या मेरा अपना इंटरप्ट लिखना संभव है और इसे कॉल करना संभव था।

यदि संभव हो, तो कृपया लिंक या विधियों का सुझाव दें।

+0

संबंधित: http://stackoverflow.com/questions/3392831/what-happens-in-an-interrupt-service

यहाँ कैसे बाधा 22h के लिए कोई हैंडलर स्थापित करने के लिए का एक उदाहरण हो जाता है -रूउटिन –

उत्तर

16

हां, आप अपना खुद का इंटरप्रूट हैंडलर बना सकते हैं और जब चाहें इसे कॉल कर सकते हैं। आपको अपने स्वयं के इंटरप्ट हैंडलर को इंगित करने के लिए इंटरप्ट वेक्टर (जो पता 0000: 0000 से शुरू होता है) सेट अप करने की आवश्यकता होगी।

प्रत्येक हैंडलर का सूचक 4 बाइट्स (ऑफसेट और सेगमेंट) का उपभोग करता है, उदाहरण के लिए यदि आप INT 22h के लिए अपने इंटरप्ट हैंडलर को सेट करना चाहते हैं तो आप अपने हैंडलर को इंगित करने के लिए 0000: 0088h पर इंटरप्रूट वेक्टर अपडेट करेंगे।

एक अप्रयुक्त इंटरप्ट संख्या (कम से कम एक जिसे हार्डवेयर इंटरट्रूट द्वारा उपयोग नहीं किया जाता है) की जांच करने के लिए Ralph Brown's interrupt list देखें।

INITIALIZE: 
     XOR AX,AX 
     MOV ES,AX 
     CLI ; Disable interrupts, might not be needed if seting up a software-only interrupt 
     MOV WORD PTR ES:[136], OFFSET INT22 ; setups offset of handler 22h 
     MOV WORD PTR ES:[138], CS   ; Here I'm assuming segment of handler is current CS 
     STI ; Reenable interrupts 
     ; End of setup 


INT22 PROC FAR 
     ; Here goes the body of your handler 
     IRET 
INT22 ENDP 
+0

मुझे यह मिलता है, लेकिन आईएनटी 21 एच में फ़ाइल लिखने की सुविधा की तरह कुछ प्रोग्रामिंग संभव है। इसके अलावा, क्या आप एक इंटरप्ट स्थापित करने का एक उदाहरण दे सकते हैं। महान मदद की होगी सर। –

+0

@TotalAnimeImmersion: हाँ, आप जो कुछ भी आप हस्तक्षेप हैंडलर में कर सकते हैं कर सकते हैं। हैंडलर सेट अप करने का एक उदाहरण जोड़ा गया। – gusbro

+0

बहुत बहुत धन्यवाद सर। वास्तव में मदद की। –