असेंबली - बेसिक सिंटेक्स

एक विधानसभा कार्यक्रम को तीन वर्गों में विभाजित किया जा सकता है -

  • data अनुभाग,

  • bss अनुभाग, और

  • text अनुभाग।

डेटा धारा

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

डेटा अनुभाग घोषित करने का सिंटैक्स है -

section.data

बीएसएस धारा

bssखंड का उपयोग चर घोषित करने के लिए किया जाता है। Bss सेक्शन घोषित करने का सिंटैक्स है -

section.bss

पाठ अनुभाग

textअनुभाग का उपयोग वास्तविक कोड रखने के लिए किया जाता है। यह खंड घोषणा के साथ शुरू होना चाहिएglobal _start, जो कर्नेल को बताता है जहां कार्यक्रम का निष्पादन शुरू होता है।

पाठ अनुभाग घोषित करने का सिंटैक्स है -

section.text
   global _start
_start:

टिप्पणियाँ

असेंबली भाषा की टिप्पणी एक अर्धविराम (;) से शुरू होती है। इसमें रिक्त सहित कोई भी मुद्रण योग्य वर्ण हो सकता है। यह अपने आप एक लाइन पर दिखाई दे सकता है, जैसे -

; This program displays a message on screen

या, एक निर्देश के साथ एक ही लाइन पर, जैसे -

add eax, ebx     ; adds ebx to eax

विधानसभा भाषा विवरण

असेंबली भाषा के कार्यक्रमों में तीन प्रकार के कथन होते हैं -

  • निष्पादन योग्य निर्देश या निर्देश,
  • असेंबलर निर्देश या छद्म ऑप्स, और
  • Macros.

executable instructions या केवल instructionsप्रोसेसर को बताएं कि क्या करना है। प्रत्येक निर्देश में एक होता हैoperation code(Opcode)। प्रत्येक निष्पादन योग्य निर्देश एक मशीन भाषा निर्देश उत्पन्न करता है।

assembler directives या pseudo-opsअसेंबलर को विधानसभा प्रक्रिया के विभिन्न पहलुओं के बारे में बताएं। ये गैर-निष्पादन योग्य हैं और मशीन भाषा निर्देश उत्पन्न नहीं करते हैं।

Macros मूल रूप से एक पाठ प्रतिस्थापन तंत्र हैं।

असेंबली लैंग्वेज स्टेटमेंट्स का सिंटैक्स

असेंबली भाषा के कथन प्रति पंक्ति एक कथन में दर्ज किए जाते हैं। प्रत्येक कथन निम्न प्रारूप का अनुसरण करता है -

[label]   mnemonic   [operands]   [;comment]

वर्ग कोष्ठक के क्षेत्र वैकल्पिक हैं। एक बुनियादी निर्देश में दो भाग होते हैं, पहला निर्देश का नाम (या mnemonic) है, जिसे निष्पादित किया जाना है, और दूसरा ऑपरेंड या कमांड के पैरामीटर हैं।

विधानसभा भाषा के विशिष्ट विवरणों के कुछ उदाहरण निम्नलिखित हैं -

INC COUNT        ; Increment the memory variable COUNT

MOV TOTAL, 48    ; Transfer the value 48 in the 
                 ; memory variable TOTAL
					  
ADD AH, BH       ; Add the content of the 
                 ; BH register into the AH register
					  
AND MASK1, 128   ; Perform AND operation on the 
                 ; variable MASK1 and 128
					  
ADD MARKS, 10    ; Add 10 to the variable MARKS
MOV AL, 10       ; Transfer the value 10 to the AL register

असेंबली में हैलो वर्ल्ड प्रोग्राम

निम्नलिखित विधानसभा भाषा कोड स्क्रीन पर स्ट्रिंग 'हैलो वर्ल्ड' प्रदर्शित करता है -

section	.text
   global _start     ;must be declared for linker (ld)
	
_start:	            ;tells linker entry point
   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
	
   mov	eax,1       ;system call number (sys_exit)
   int	0x80        ;call kernel

section	.data
msg db 'Hello, world!', 0xa  ;string to be printed
len equ $ - msg     ;length of the string

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

Hello, world!

NASM में असेंबली प्रोग्राम को संकलित करना और जोड़ना

सुनिश्चित करें कि आपने का रास्ता तय कर लिया है nasm तथा ldआपके पैथ वातावरण चर में बायनेरिज़। अब, उपरोक्त कार्यक्रम को संकलित करने और जोड़ने के लिए निम्नलिखित कदम उठाएँ -

  • पाठ संपादक का उपयोग करके उपरोक्त कोड टाइप करें और इसे hello.asm के रूप में सहेजें।

  • सुनिश्चित करें कि आप उसी निर्देशिका में हैं जहाँ आपने बचाया था hello.asm

  • प्रोग्राम को इकट्ठा करने के लिए, टाइप करें nasm -f elf hello.asm

  • यदि कोई त्रुटि है, तो आपको इस स्तर पर इसके बारे में संकेत दिया जाएगा। अन्यथा, आपके प्रोग्राम नाम की एक ऑब्जेक्ट फ़ाइलhello.o उत्पन्न होगा।

  • ऑब्जेक्ट फ़ाइल को लिंक करने के लिए और हैलो नामक एक निष्पादन योग्य फ़ाइल बनाएं ld -m elf_i386 -s -o hello hello.o

  • टाइप करके कार्यक्रम निष्पादित करें ./hello

यदि आपने सब कुछ सही ढंग से किया है, तो यह 'हैलो, वर्ल्ड!' स्क्रीन पर।