Macros in Assembly language

Prahlad Godara ------ From DOOSEEP


असेंबली मैक्रो - परिभाषा, वाक्य-विन्यास और उदाहरण

मैक्रोज़: एक मैक्रो निर्देशों का एक सेट है जिसे एक बार परिभाषित किया जाता है और फिर प्रोग्राम में कई बार उपयोग किया जा सकता है। यदि किसी कार्य विशेष के लिए निर्देशों का बार-बार प्रयोग करना पड़े तो उन निर्देशों के समूह से एक कोड ब्लॉक बना दिया जाता है जिसे आवश्यकता पड़ने पर पुकारा और प्रयोग किया जाता है। इसे मैक्रोज़ कहा जाता है।

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

macro Syntax

NASM में, मैक्रोज़ को %macro और %endmacro निर्देशों के साथ परिभाषित किया गया है। मैक्रोज़ %macro निर्देश से शुरू होते हैं और %endmacro निर्देश के साथ समाप्त होते हैं।

Syntax for macro definition -

 %macro macro_name  number_of_params
    macro body
    %endmacro

जहां, number_of_params पैरामीटर की संख्या निर्दिष्ट करता है, macro_name मैक्रो का नाम निर्दिष्ट करता है।

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


उदाहरण के लिए, प्रोग्राम के लिए एक बहुत ही सामान्य आवश्यकता स्क्रीन पर वर्णों की एक स्ट्रिंग लिखना है। वर्णों की एक स्ट्रिंग प्रदर्शित करने के लिए, आपको निर्देशों के निम्नलिखित अनुक्रम की आवश्यकता है −

 mov	edx,len	    ;message length
  mov	ecx,msg	    ;message to write
  mov	ebx,1       ;file descriptor (stdout)
  mov	eax,4       ;system call number (sys_write)
  int	0x80        ;call kernel

एक वर्ण स्ट्रिंग प्रदर्शित करने के उपरोक्त उदाहरण में, रजिस्टरों EAX, EBX, ECX और EDX का उपयोग INT 80H फ़ंक्शन कॉल द्वारा किया जाता है। इसलिए, हर बार जब आपको स्क्रीन पर प्रदर्शित करने की आवश्यकता होती है, तो आपको इन रजिस्टरों को स्टैक पर सहेजना होगा, INT 80H को कॉल करना होगा, और फिर स्टैक से रजिस्टरों के मूल मूल्य को पुनर्स्थापित करना होगा। इसलिए, डेटा को सहेजने और पुनर्स्थापित करने के लिए दो मैक्रोज़ लिखना उपयोगी हो सकता है।

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

Macros Exampal

निम्न उदाहरण दिखाता है कि मैक्रोज़ को कैसे परिभाषित और उपयोग किया जाए −

 ; A macro with two parameters
  ; Implements the write system call
     %macro write_string 2 
        mov   eax, 4
        mov   ebx, 1
        mov   ecx, %1
        mov   edx, %2
        int   80h
     %endmacro
   
  section	.text
     global _start            ;must be declared for using gcc
    
  _start:                     ;tell linker entry point
     write_string msg1, len1               
     write_string msg2, len2    
     write_string msg3, len3  
    
     mov eax,1                ;system call number (sys_exit)
     int 0x80                 ;call kernel
  
  section	.data
  msg1 db	'Hello, programmers!',0xA,0xD 	
  len1 equ $ - msg1			
  
  msg2 db 'Welcome to the world of,', 0xA,0xD 
  len2 equ $- msg2 
  
  msg3 db 'Linux assembly programming! '
  len3 equ $- msg3

परिणाम −

 Hello, programmers!
  Welcome to the world of,
  Linux assembly programming! 

Tags- Nasm Assembly language Macros in hindi. This blogcreates content similar to stackoverflow geeks for geeks tutorialspoint w3schools and dooseep,macro in assembly in hindi
कोई टिप्पणी नहीं:
एक टिप्पणी भेजें