असेंबली - मेमोरी सेगमेंट
एक विभाजित मेमोरी मॉडल सिस्टम मेमोरी को सेगमेंट रजिस्टरों में स्थित पॉइंटर्स द्वारा संदर्भित स्वतंत्र सेगमेंट के समूहों में विभाजित करता है। प्रत्येक सेगमेंट का उपयोग एक विशिष्ट प्रकार के डेटा को शामिल करने के लिए किया जाता है। एक भाग का उपयोग निर्देश कोड रखने के लिए किया जाता है, दूसरा भाग डेटा तत्वों को संग्रहीत करता है, और तीसरा भाग प्रोग्राम स्टैक रखता है।
उपरोक्त कथन के अनुसार हम विभिन्न मेमोरी भागो को निम्न रूप में निर्दिष्ट कर सकते हैं. डेटा सेगमेंट, कोड सेगमेंट, स्टैक.
- डेटा सेगमेंट – डेटा सेक्शन का उपयोग आरंभिक डेटा या स्थिरांक घोषित करने के लिए किया जाता है। यह डेटा रनटाइम पर नहीं बदलता है। आप इस खंड में विभिन्न स्थिर मान, फ़ाइल नाम या बफर आकार आदि घोषित कर सकते हैं।
डेटा सेगमेंट घोषित करने का सिंटैक्स - segment.data -
कोड सेगमेंट - इसे .text सेक्शन द्वारा दर्शाया जाता है। यह मेमोरी में एक क्षेत्र को परिभाषित करता है जो निर्देश कोड को स्टोर करता है। यह भी एक निश्चित क्षेत्र है।
कोड सेगमेंट सिंटैक्स - segment.text -
स्टैक - इस सेगमेंट में प्रोग्राम के भीतर फ़ंक्शंस और प्रक्रियाओं को दिए गए डेटा मान शामिल हैं।
हम पहले ही एक असेम्ब्ली प्रोग्राम के तीन सेक्शन पर चर्चा कर चुके हैं। ये सेक्शन विभिन्न मेमोरी सेगमेंट का भी प्रतिनिधित्व करते हैं।
दिलचस्प बात यह है कि यदि आप सेक्शन कीवर्ड को सेगमेंट से बदलते हैं, तो आपको वही परिणाम मिलेगा। निम्नलिखित कोड का प्रयास करें -
segment .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 ;कॉल कर्नेल
segment .data ;डेटा सेगमेंट
msg db 'हेलो वर्ल्ड', 0xa ;प्रिंट होने वाली स्ट्रिंग
len equ $ - msg ;स्ट्रिंग की लंबाई
जब उपरोक्त कोड कंपाइल और एक्सीक्यूट किया जाता है, तो यह निम्न परिणाम उत्पन्न करता है −
हेलो वर्ल्ड