Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग · पाठ

हार्डवेयर के साथ सीधे इंटरफेस करना

कर्नेल-स्तरीय कोड के भीतर I/O पोर्ट और मेमोरी-मैप्ड I/O का उपयोग करके सीधे हार्डवेयर तक पहुँचने की तकनीकों का अन्वेषण कीजिए।

पाठ 3, कुल 4 में से11 चरण

हार्डवेयर के साथ सीधे इंटरफेस करना, CoddyKit पर Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

हार्डवेयर से सीधे संवाद क्यों करें?

इस पाठ में, हम समझेंगे कि CPU हार्डवेयर उपकरणों के साथ सीधे कैसे संचार करता है। आम तौर पर यह कार्य आपका ऑपरेटिंग सिस्टम संभालता है, लेकिन कर्नेल-स्तरीय कोड और डिवाइस ड्राइवरों को नेटवर्क कार्ड, ग्राफ़िक्स प्रोसेसर या स्टोरेज नियंत्रक जैसे घटकों से सीधे संवाद करना पड़ता है।

यह सीधा संपर्क एक शक्तिशाली, निम्न-स्तरीय क्षमता है और आपके कंप्यूटर के काम करने के तरीके की आधारशिला बनता है।

हार्डवेयर से संवाद करने के दो तरीके

x86 आर्किटेक्चर CPU को परिधीय उपकरणों के साथ संचार करने के लिए दो मुख्य तरीके प्रदान करता है:

  • I/O पोर्ट: एक समर्पित, अलग एड्रेस स्पेस।
  • मेमोरी-मैप्ड I/O (MMIO): उपकरण के रजिस्टर CPU के मुख्य मेमोरी एड्रेस स्पेस के स्थानों के रूप में दिखाई देते हैं।

दोनों तरीकों से CPU उपकरण के रजिस्टरों से पढ़ और उनमें लिख सकता है, लेकिन इनके तंत्र और निर्देश अलग-अलग होते हैं।

I/O पोर्ट को समझना

I/O पोर्ट एक विशेष 64KB एड्रेस स्पेस होते हैं, जो मुख्य मेमोरी पतों से पूरी तरह अलग रहते हैं। उपकरण अपने आंतरिक रजिस्टरों को विशिष्ट पोर्ट पतों पर मैप करते हैं।

इन्हें ऐसे डाक-बक्सों के समूह की तरह समझिए, जिनमें प्रत्येक का एक अद्वितीय नंबर होता है और CPU तथा उपकरण छोटे-छोटे डेटा अंशों का आदान-प्रदान कर सकते हैं। इनका उपयोग अक्सर पुराने या सरल उपकरणों अथवा बुनियादी नियंत्रण कार्यों के लिए किया जाता है।

I/O पोर्ट से पढ़ना: IN निर्देश

I/O पोर्ट से डेटा पढ़ने के लिए x86 असेंबली में IN निर्देश का उपयोग किया जाता है। यह निर्देश पोर्ट का पता (आमतौर पर DX रजिस्टर में) लेता है और डेटा को एक संचायक रजिस्टर (AL, AX या EAX) में स्थानांतरित करता है।

  • IN AL, DX: पोर्ट DX से 1 बाइट पढ़कर AL में रखता है।
  • IN AX, DX: पोर्ट DX से 2 बाइट पढ़कर AX में रखता है।
  • IN EAX, DX: पोर्ट DX से 4 बाइट पढ़कर EAX में रखता है।
; Read a byte from I/O port 0x60 (e.g., keyboard data)
MOV DX, 0x60    ; Load port address into DX
IN AL, DX       ; Read 1 byte from port 0x60 into AL
; AL now holds the data from port 0x60

I/O पोर्ट में लिखना: OUT निर्देश

I/O पोर्ट में डेटा लिखने के लिए हम OUT निर्देश का उपयोग करते हैं। यह संचायक रजिस्टर से डेटा लेकर निर्दिष्ट पोर्ट पते पर भेजता है (जो सामान्यतः फिर से DX में होता है)।

  • OUT DX, AL: AL से 1 बाइट पोर्ट DX में लिखता है।
  • OUT DX, AX: AX से 2 बाइट पोर्ट DX में लिखता है।
  • OUT DX, EAX: EAX से 4 बाइट पोर्ट DX में लिखता है।
; Write a byte 0xFA to I/O port 0x64 (e.g., keyboard command)
MOV DX, 0x64    ; Load port address into DX
MOV AL, 0xFA    ; Load data to write into AL
OUT DX, AL      ; Write 0xFA to port 0x64

I/O पोर्ट संपर्क की एक झलक

यह एक वैचारिक उदाहरण है कि सीरियल संचार के लिए UART (यूनिवर्सल एसिंक्रोनस रिसीवर/ट्रांसमीटर) जैसे सरल उपकरण के साथ संपर्क करने में IN और OUT का एक साथ उपयोग कैसे किया जा सकता है। याद रखिए, इन कार्यों के लिए कर्नेल विशेषाधिकार आवश्यक होते हैं!

; Conceptual: Check UART status, then send a character
MOV DX, 0x3F8 + 5 ; Port address for UART Line Status Register (LSR)
.wait_tx_ready:
  IN AL, DX         ; Read LSR
  TEST AL, 0x20     ; Check Transmit Empty (bit 5)
  JZ  .wait_tx_ready; Loop if not ready

MOV DX, 0x3F8     ; Port address for UART Data Register
MOV AL, 'K'       ; Data to send ('K')
OUT DX, AL        ; Write 'K' to the UART

मेमोरी-मैप्ड I/O (MMIO)

मेमोरी-मैप्ड I/O (MMIO) CPU द्वारा उपकरणों के साथ संपर्क करने का अधिक आधुनिक और सामान्य तरीका है। अलग I/O पोर्ट स्पेस के बजाय, उपकरण के रजिस्टर सीधे CPU के भौतिक मेमोरी एड्रेस स्पेस में मैप किए जाते हैं।

इसका अर्थ है कि CPU उपकरण के रजिस्टरों तक उन्हीं लोड और स्टोर निर्देशों (जैसे MOV) का उपयोग करके पहुँच सकता है, जिनका उपयोग वह सामान्य RAM के लिए करता है। इससे GPU और नेटवर्क कार्ड जैसे जटिल उपकरणों के लिए यह तरीका अक्सर अधिक तेज़ और लचीला होता है।

MMIO: हार्डवेयर नियंत्रण के लिए MOV का उपयोग

चूँकि MMIO स्थान सामान्य मेमोरी पतों की तरह दिखाई देते हैं, इसलिए आपको विशेष IN/OUT निर्देशों की आवश्यकता नहीं होती। इन पतों से पढ़ने या उनमें लिखने के लिए आप बस MOV जैसे मानक मेमोरी-एक्सेस निर्देशों का उपयोग करते हैं।

इन मेमोरी मैपिंग को स्थापित करने की ज़िम्मेदारी ऑपरेटिंग सिस्टम कर्नेल की होती है, ताकि ड्राइवर कोड उन तक पहुँच सके।

; Conceptual: Accessing a device register via MMIO
; Assume MMIO_BASE_ADDR is a virtual address mapped to a physical device register

; Read a 32-bit value from a device register at MMIO_BASE_ADDR + 0x10
MOV EAX, [MMIO_BASE_ADDR + 0x10]

; Modify the value (e.g., increment it)
ADD EAX, 1

; Write the modified value back to the device register
MOV [MMIO_BASE_ADDR + 0x10], EAX

MMIO बनाम I/O पोर्ट: तुलना

आइए मुख्य अंतर संक्षेप में देखें:

  • I/O पोर्ट: अलग एड्रेस स्पेस, IN/OUT निर्देशों का उपयोग, और अक्सर सरल या पुराने उपकरणों (जैसे PIC, PIT) के लिए।
  • MMIO: मुख्य मेमोरी एड्रेस स्पेस का हिस्सा, मानक MOV निर्देशों का उपयोग, और आधुनिक, उच्च-गति तथा जटिल उपकरणों (जैसे GPU और नेटवर्क कार्ड) के लिए पसंदीदा।

CPU के अनुकूलित मेमोरी-एक्सेस तंत्रों के उपयोग के कारण MMIO सामान्यतः बेहतर प्रदर्शन और आसान प्रोग्रामिंग प्रदान करता है।

सीधे हार्डवेयर तक पहुँच: कर्नेल का क्षेत्र

यह समझना अत्यंत महत्वपूर्ण है कि I/O पोर्ट या MMIO के माध्यम से सीधे हार्डवेयर तक पहुँचना अत्यधिक विशेषाधिकार-युक्त कार्य है। सुरक्षा और सिस्टम की स्थिरता के लिए उपयोगकर्ता-मोड प्रोग्रामों को ये कार्य सीधे करने से रोका जाता है।

ऑपरेटिंग सिस्टम कर्नेल द्वारपाल की भूमिका निभाता है और उपयोगकर्ता अनुप्रयोगों को हार्डवेयर के साथ सुरक्षित रूप से संपर्क करने के लिए नियंत्रित इंटरफ़ेस (जैसे सिस्टम कॉल या डिवाइस ड्राइवर) प्रदान करता है।

पाठ का सारांश: हार्डवेयर के साथ संपर्क

आपने कर्नेल के दृष्टिकोण से x86 असेंबली में हार्डवेयर के साथ सीधे संपर्क करने के दो मुख्य तरीकों के बारे में सीखा:

  • I/O पोर्ट: एक अलग एड्रेस स्पेस, जिस तक IN और OUT निर्देशों से पहुँचा जाता है।
  • मेमोरी-मैप्ड I/O (MMIO): उपकरण के रजिस्टर मुख्य मेमोरी में मैप किए जाते हैं और मानक MOV निर्देशों से उन तक पहुँचा जाता है।

याद रखिए कि सिस्टम की अखंडता और सुरक्षा बनाए रखने के लिए ये शक्तिशाली तकनीकें कर्नेल-स्तरीय कोड और डिवाइस ड्राइवरों तक सीमित रहती हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Assembly सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “हार्डवेयर के साथ सीधे इंटरफेस करना” पाठ निःशुल्क है?

हाँ—“हार्डवेयर के साथ सीधे इंटरफेस करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“हार्डवेयर के साथ सीधे इंटरफेस करना” में मैं क्या सीखूँगा?

कर्नेल-स्तरीय कोड के भीतर I/O पोर्ट और मेमोरी-मैप्ड I/O का उपयोग करके सीधे हार्डवेयर तक पहुँचने की तकनीकों का अन्वेषण कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“हार्डवेयर के साथ सीधे इंटरफेस करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. कर्नेल स्पेस का परिचय
  2. सरल डिवाइस ड्राइवर लिखना
  3. हार्डवेयर के साथ सीधे इंटरफेस करना
  4. कर्नेल स्पेस में सिंक्रोनाइज़ेशन और समवर्तीता
← Assembly भाषा और x86 निम्न-स्तरीय सिस्टम प्रोग्रामिंग पर वापस जाएँ