असेंबली भाषा सिंटेक्स
अन्य प्रोग्रामिंग लैंग्वेज की तरह, असेंबली लैंग्वेज का भी लिखने का अपना तरीका होता है। nasm assembler पर असेंबली सीखने के लिए, कोड को उचित सिंटैक्स के अनुसार लिखा जाना चाहिए, अन्यथा कोड नहीं चलेगा।
मूल सिंटेक्स प्रारूप -
section.bss
section .text
global _start
_start: mov rax, 1 ; लिखने के लिए सिस्टम कॉल
mov rdi, 1 ; फ़ाइल हैंडल 1 स्टडआउट है
section .data
message: db "Hello, World", 10 ; अंत में नई पंक्ति नोट करें
स्टेटमेंट सिंटेक्स-
[label] mnemonic [operands] [;comment]
असेंबली प्रोग्राम सेक्शन
एक असेंबली प्रोग्राम को तीन खंडों में विभाजित किया जा सकता है - डेटा सेक्शन, bss सेक्शन और टेक्स्ट सेक्शन।
- डेटा सेक्शन – डेटा सेक्शन का उपयोग आरंभिक डेटा या स्थिरांक घोषित करने के लिए किया जाता है। यह डेटा रनटाइम पर नहीं बदलता है। आप इस खंड में विभिन्न स्थिर मान, फ़ाइल नाम या बफर आकार आदि घोषित कर सकते हैं।
डेटा सेक्शन घोषित करने का सिंटैक्स - section.data -
BSS सेक्शन - BSS सेक्शन का उपयोग वेरिएबल्स घोषित करने के लिए किया जाता है।
BSS सेक्शन सिंटैक्स - section.bss -
टेक्स्ट सेक्शन - टेक्स्ट सेक्शन का उपयोग वास्तविक कोड को होल्ड करने के लिए किया जाता है। यह खंड global _start घोषणा के साथ शुरू होना चाहिए, जो कर्नेल को बताता है कि कार्यक्रम का निष्पादन कहाँ से शुरू करना है।
टेक्स्ट सेक्शन सिंटैक्स - section.text
टिप्पणियाँ - असेंबली लैंग्वेज कमेंट्स सेमीकोलन (;) से शुरू होते हैं। इसमें रिक्त स्थान सहित कोई भी योग्य वर्ण हो सकता है। जैसे - ; यह असेंबली लैंग्वेज प्रोग्राम में एक टिप्पणी है.
असेंबली लैंग्वेज स्टेटमेंट्स
असेंबली लैंग्वेज प्रोग्राम में तीन तरह के स्टेटमेंट होते हैं: - एक्ज़ीक्यूटेबल, स्यूडो-ऑप्स, मैक्रोज़
- एक्ज़ीक्यूटेबल निर्देश - निष्पादन योग्य निर्देश या साधारण निर्देश प्रोसेसर को बताते हैं कि क्या करना है। प्रत्येक निर्देश में एक ऑपरेशन कोड (opcode) होता है। प्रत्येक निष्पादन योग्य अनुदेश एक मशीनी भाषा निर्देश उत्पन्न करता है।
- असेंबलर निर्देश या छद्म-ऑप्स - असेम्बलर निर्देश या छद्म-ऑप्स असेम्बलर को असेम्बली प्रक्रिया के विभिन्न पहलुओं के बारे में बताते हैं। ये निष्पादन योग्य नहीं हैं और मशीन भाषा निर्देश उत्पन्न नहीं करते हैं।
- Macros - मैक्रोज़ मूल रूप से एक टेक्स्ट रिप्लेसमेंट मैकेनिज्म है।
असेंबली लैंग्वेज स्टेटमेंट का सिंटेक्स - [label] mnemonic [operands] [;comment]
एक मूल निर्देश में दो भाग होते हैं, पहला भाग निष्पादित किए जाने वाले निर्देश का नाम होता है, और दूसरा कमांड के संचालन या पैरामीटर होते हैं।
असेंबली लैंग्वेज स्टेटमेंट के कुछ उदाहरण-
INC COUNT ; मेमोरी वेरिएबल की संख्या बढ़ाएं
MOV TOTAL, 54 ; मेमोरी वेरिएबल TOTAL में
; मान 54 को सेट करें
ADD AH, BH ; AH रजिस्टर में BH रजिस्टर
; की वैल्यू को जोड़े।
AND MASK1, 114 ; MASK1 और 114 वेरिएबल
; पर AND ऑपरेशन करें
ADD MARKS, 15 ; वेरिएबल MARKS में 15 जोड़ें
MOV AL, 12 ; मान 12 को AL रजिस्टर में सेट करें
असेंबली लैंग्वेज में हैलो वर्ल्ड प्रोग्राम
निम्न असेंबली भाषा कोड स्क्रीन पर स्ट्रिंग 'हैलो वर्ल्ड' प्रदर्शित करता है −
section .text
global _start ;लिंकर के लिए घोषित किया जाना चाहिए
_start: ;लिंकर एंट्री पॉइंट
mov edx,len ;संदेश लंबाई
mov ecx,msg ;लिखने के लिए संदेश
mov ebx,1 ;फाइल डिस्क्रिप्टर (stdout)
mov eax,4 ;सिस्टम कॉल संख्या (sys_write)
int 0x80 ;कॉल कर्नेल
mov eax,1 ;सिस्टम कॉल नंबर (sys_exit)
int 0x80 ;कॉल कर्नेल
section .data
msg db 'हेलो वर्ल्ड', 0xa ;प्रिंट होने वाली स्ट्रिंग
len equ $ - msg ;स्ट्रिंग की लंबाई
जब उपरोक्त कोड कंपाइल और एक्सीक्यूट किया जाता है, तो यह निम्न परिणाम उत्पन्न करता है −
हेलो वर्ल्ड
NASM में असेंबली प्रोग्राम को कंपाइल, लिंक और रन करें।
अपने PATH पर्यावरण चर में nasm और ld बायनेरिज़ के लिए पथ सेट करें। फिर उपरोक्त प्रोग्राम को कंपाइल और लिंक करने के लिए इन चरणों का पालन करें -
- टेक्स्ट एडिटर का उपयोग करके उपरोक्त कोड टाइप करें और इसे इस नाम से सहेजें - hello.asm.
- सुनिश्चित करें कि आप उसी डायरेक्टरी (folder) में हैं जहां आपने hello.asm को सेव किया था।
- प्रोग्राम को असेंबल करने के लिए टाइप करें nasm -f elf hello.asm.
- यदि कोई त्रुटि है, तो आपको इस चरण में इसके बारे में संकेत दिया जाएगा। अन्यथा आपके प्रोग्राम की एक hello.o.ऑब्जेक्ट फाइल बन जाएगी।
- ऑब्जेक्ट फ़ाइल को लिंक करने के लिए और हैलो नाम की एक एक्जीक्यूटेबल फ़ाइल बनाने के लिए टाइप करें , ld -m elf_i386 -s -o hello hello.o.
- ./hello टाइप करके प्रोग्राम को एक्जीक्यूट करें.
यदि आपने सब कुछ सही ढंग से किया है, तो यह स्क्रीन पर "हेलो वर्ल्ड".प्रदर्शित होगा।