एड्रेसिंग मोड - असंबली लैंग्वेज

Prahlad Godara ------ From DOOSEEP

असेंबली लैंग्वेज या कंप्यूटर के साथ कोई भी कार्य करने के लिए डेटा का होना आवश्यक है जिसके उपयोग से कोई भी परिणाम प्राप्त किया जा सकता है। तो ये विभिन्न डेटा जैसे - (वीडियो ऑडियो टेक्स्ट कोई इनपुट या कोई निर्देश आदि) ये सभी मेमोरी के किसी स्थान में संग्रहीत होते हैं। फिर जब उन्हें एक्सेस करना होता है। इसके बाद उस डेटा के शुरुआती बिट स्थान का पता लगाकर पूरा डेटा पुनर्प्राप्त किया जाता है। या यदि कोई प्रोग्राम चल रहा है तो उसके लिए उपयोगी डेटा की लोकेशन और अगले रनिंग इंस्ट्रक्शन को भी एड्रेसिंग मोड के जरिए आसानी से चलाया जा सकता है।

असेम्बली भाषा में एड्रेसिंग मोड

अधिकांश असेंबली भाषा निर्देशों को चलाने के लिए ऑपरेंड की आवश्यकता होती है। एक ऑपरेंड पता वह स्थान प्रदान करता है जहां संसाधित किया जाने वाला डेटा संग्रहीत किया जाता है। कुछ निर्देशों के लिए एक ऑपरेंड की आवश्यकता नहीं होती है, जबकि कुछ अन्य निर्देशों के लिए एक, दो या तीन ऑपरेंड की आवश्यकता हो सकती है।

जब एक निर्देश के लिए दो ऑपरेंड की आवश्यकता होती है, तो पहला ऑपरेंड आमतौर पर डेस्टिनेशन होता है, जो एक रजिस्टर या मेमोरी लोकेशन में डेटा रखता है, और दूसरा ऑपरेंड स्रोत होता है। स्रोत में या तो वितरित किया जाने वाला डेटा (तत्काल पता) या डेटा का पता (रजिस्टर या मेमोरी में) होता है। आम तौर पर, ऑपरेशन के बाद स्रोत डेटा अपरिवर्तित रहता है।

सामान्य तौर पर डेटा एड्रेसिंग के तीन तरीकों का इस्तेमाल किया जाता है।

  1. Register addressing
  2. Immediate addressing
  3. Memory addressing

रजिस्टर एड्रेसिंग

रजिस्टर एड्रेसिंग में ऑपरेंड एक रजिस्टर में होते हैं। निर्देशों के आधार पर, वे एक रजिस्टर में मौजूद डेटा का पता रखते हैं या प्रत्यक्ष डेटा का उपयोग करते हैं।

उदाहरण

MOV DX, TAX_RATE   ; पहले ऑपरेंड में रजिस्टर
MOV COUNT, CX	   ; दूसरे ऑपरेंड में रजिस्टर
MOV EAX, EBX	   ; दोनों ऑपरेंड रजिस्टरों में हैं
            

चूंकि स्मृति रजिस्टरों के बीच डेटा प्रोसेसिंग में शामिल नहीं है, यह डेटा का सबसे तेज़ प्रसंस्करण प्रदान करती है।


इमीडियेट एड्रेसिंग

तत्काल एड्रेसिंग ऑपरेंड एक निरंतर मूल्य या अभिव्यक्ति है। जब दो ऑपरेंड वाला निर्देश तत्काल एड्रेसिंग का उपयोग करता है, तो पहला ऑपरेंड एक रजिस्टर या मेमोरी लोकेशन हो सकता है, और दूसरा ऑपरेंड तत्काल स्थिरांक हो सकता है। पहला ऑपरेंड डेटा की लंबाई को परिभाषित करता है।

Example

    BYTE_VALUE  DB  150    ; एक बाइट मान परिभाषित 
    WORD_VALUE  DW  300    ; एक शब्द मान परिभाषित
    ADD  BYTE_VALUE, 65    ; एक तत्काल संकार्य 65 जोड़ा गया
    MOV  AX, 45H           ; तत्काल स्थिरांक 45H को AX में स्थानांतरित

मेमोरी एड्रेसिंग

डारेक्ट मेमोरी एड्रेसिंग

डायरेक्ट एड्रेसिंग मोड में, ऑफ़सेट वैल्यू को डायरेक्ट इंस्ट्रक्शन के हिस्से के रूप में निर्दिष्ट किया जाता है, जिसे आमतौर पर वेरिएबल नाम से दर्शाया जाता है। असेंबलर ऑफ़सेट मान की गणना करता है और एक प्रतीक तालिका बनाए रखता है, जो प्रोग्राम में उपयोग किए जाने वाले सभी चर के ऑफ़सेट मानों को संग्रहीत करता है।

डायरेक्ट मेमोरी एड्रेसिंग में, एक ऑपरेंड एक मेमोरी लोकेशन को संदर्भित करता है और दूसरा ऑपरेंड एक रजिस्टर को संदर्भित करता है।

Example

    ADD	BYTE_VALUE, DL	; मेमोरी लोकेशन में रजिस्टर जोड़ता है
    MOV	BX, WORD_VALUE	; मेमोरी से ऑपरेंड को रजिस्टर में जोड़ा जाता है

जब ऑपरेंड को मेमोरी एड्रेसिंग मोड में निर्दिष्ट किया जाता है, तो मुख्य मेमोरी तक सीधे पहुंच की आवश्यकता होती है, आमतौर पर डेटा सेगमेंट में। समाधान की इस पद्धति के परिणामस्वरूप डेटा की धीमी प्रक्रिया होती है। मेमोरी में डेटा के सटीक स्थान का पता लगाने के लिए, हमें सेगमेंट स्टार्ट एड्रेस की आवश्यकता होती है, जो आमतौर पर डीएस रजिस्टर और ऑफसेट वैल्यू में पाया जाता है। इस ऑफ़सेट मान को प्रभावी पता भी कहा जाता है।

डायरेक्ट-ऑफसेट एड्रेसिंग

यह एड्रेसिंग मोड किसी पते को संशोधित करने के लिए अंकगणितीय ऑपरेटरों का उपयोग करता है। उदाहरण के लिए, निम्नलिखित परिभाषाओं को देखें जो डेटा की तालिका को परिभाषित करती हैं -


    BYTE_TABLE DB  14, 15, 22, 45      ; बाइट टेबल्स
    WORD_TABLE DW  134, 345, 564, 123  ; शब्दों की टेबल्स

The following operations access data in registers from tables in memory −


    MOV CL, BYTE_TABLE[2]	; BYTE_TABLE का तीसरा तत्व प्राप्त करता है
    MOV CL, BYTE_TABLE + 2	; Gets the 3rd element of the BYTE_TABLE
    MOV CX, WORD_TABLE[3]	; WORD_TABLE का चौथा तत्व प्राप्त करता है
    MOV CX, WORD_TABLE + 3	; WORD_TABLE का चौथा तत्व प्राप्त करता है

अप्रत्यक्ष मेमोरी एड्रेसिंग

यह एड्रेसिंग मोड कंप्यूटर की सेगमेंटेशन क्षमता का उपयोग करता है। अप्रत्यक्ष संबोधन आमतौर पर उन चरों के लिए उपयोग किया जाता है जिनमें कई तत्व होते हैं, जैसे कि सरणियाँ। सरणी का प्रारंभिक पता EBX रजिस्टर में संग्रहीत किया जाता है।

निम्न कोड स्निपेट दिखाता है कि चर के विभिन्न तत्वों तक कैसे पहुँचा जाए।


    MY_TABLE TIMES 10 DW 0  ; 10 शब्द आवंटित करता है (2 बाइट्स) प्रत्येक को 0 से प्रारंभ किया जाता है
    MOV EBX, [MY_TABLE]     ; EBX में MY_TABLE का प्रभावी पता
    MOV [EBX], 110          ; MY_TABLE[0] = 110
    ADD EBX, 2              ; EBX = EBX +2
    MOV [EBX], 123          ; MY_TABLE[1] = 123

MOV instruction

MOV निर्देश का उपयोग डेटा को एक संग्रहण स्थान से दूसरे स्थान पर ले जाने के लिए किया जाता है। MOV निर्देश दो ऑपरेंड लेता है।

Syntax -The syntax of MOV instruction is -

    MOV  destination, source
MOV निर्देश निम्नलिखित पांच रूपों में से एक में हो सकता है -

    MOV  register, register
    MOV  register, immediate
    MOV  memory, immediate
    MOV  register, memory
    MOV  memory, register

कृपया ध्यान दें कि - MOV ऑपरेशन में दोनों ऑपरेंड एक ही आकार के होने चाहिए। स्रोत ऑपरेंड का मान अपरिवर्तित रहता है

The MOV instruction causes ambiguity at times. For example, look at the statements -

    MOV  EBX, [MY_TABLE]  ; EBX में MY_TABLE का प्रभावी पता
    MOV  [EBX], 110	      ; MY_TABLE[0] = 110

यहां यह स्पष्ट नहीं है कि आप 110 नंबर के बाइट या शब्द को स्थानांतरित करना चाहते हैं या नहीं। ऐसे मामलों में, टाइप स्पेसियर का उपयोग करना बुद्धिमानी है।

निम्न तालिका कुछ सामान्य प्रकार के विनिर्देशकों को दर्शाती है -

Type specifier bytes addressed
byte 1
word 2
DWORD4
QWORD 8
TBYTE10

उदाहरण

निम्नलिखित कार्यक्रम ऊपर चर्चा की गई कुछ अवधारणाओं को दिखाता है। यह मेमोरी के डेटा सेक्शन में एक नाम 'dooseep' स्टोर करता है, फिर प्रोग्रामेटिक रूप से इसके मान को दूसरे नाम 'prg' में बदल देता है और दोनों नामों को प्रदर्शित करता है।


    section	.text
    global _start     ;लिंकर के लिए घोषित किया जाना चाहिए (ld)
 _start:             ;लिंकर प्रवेश बिंदु
     
    ;नाम लिखना 'dooseep'
    mov	edx,9       ;message length
    mov	ecx, name   ;संदेश लिखने के लिए
    mov	ebx,1       ;फाइल डिस्क्रिप्टर (stdout)
    mov	eax,4       ;सिस्टम कॉल नंबर (sys_write)
    int	0x80        ;call kernel
     
    mov	[name],  dword 'prg'    ; Changed the name to prg
     
    ;नाम लिखना 'prg eep'
    mov	edx,8       ;message length
    mov	ecx,name    ;संदेश लिखने के लिए
    mov	ebx,1       ;फाइल डिस्क्रिप्टर (stdout)
    mov	eax,4       ;सिस्टम कॉल नंबर (sys_write)
    int	0x80        ;call kernel
     
    mov	eax,1       ;सिस्टम कॉल नंबर (sys_exit)
    int	0x80        ;call kernel
 
 section	.data
 name db 'dooseep'

जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह निम्न परिणाम उत्पन्न करता है

dooseep prg eep

Read in- English
Tags- Assembly - Addressing Modes i hindi, assembly language Addressing, type of Assembly Program Addressing, example program in assembly language
कोई टिप्पणी नहीं:
एक टिप्पणी भेजें