NASM चर किसी विशिष्ट नाम के साथ किसी भी डेटा को संग्रहीत करने के लिए भंडारण स्थान को आरक्षित करते हैं। जब भी उस डेटा या मूल्य के लिए एक निर्देशात्मक आवश्यकता होती है, तो उस डेटा को आसानी से वेरिएबल के नाम से एक्सेस किया जा सकता है।
NASM असेंबली भाषा में चर (Variable)
डेटा के लिए संग्रहण स्थान आवंटित करना
वैरिएबल सिंटैक्स - डेटा के लिए स्टोरेज एलोकेशन स्टेटमेंट
[variable-name] define-directive initial-value [,initial-value]...
जहां, चर-नाम प्रत्येक भंडारण स्थान के लिए पहचानकर्ता है। असेंबलर डेटा सेगमेंट में परिभाषित प्रत्येक चर नाम के लिए एक ऑफसेट मान जोड़ता है।
शुरुआत में ही डेटा प्रकार और मान सेट
डिफाइन डायरेक्ट के पांच बुनियादी प्रकार
Directive | Purpose | Storage Space |
---|---|---|
DB | Define Byte | allocates 1 byte |
DW | Define Word | allocates 2 bytes |
DD | Define Doubleword | allocates 4 bytes |
DQ | Define Quadword | allocates 8 bytes |
DT | Define Ten Bytes | allocates 10 bytes |
निम्नलिखित निर्देशों का उपयोग करने के कुछ उदाहरण हैं -
choice DB 'P'
number DW 12345
neg_number DW -12345
big_number DQ 123456789
real_number1 DD 1.234
real_number2 DQ 123.456
कृपया ध्यान दें
- अक्षर के प्रत्येक बाइट को हेक्साडेसिमल में इसके ASCII मान के रूप में संग्रहीत किया जाता है।
- प्रत्येक दशमलव मान स्वचालित रूप से इसके 16-बिट बाइनरी समकक्ष में परिवर्तित हो जाता है और एक हेक्साडेसिमल संख्या के रूप में संग्रहीत होता है।
- प्रोसेसर लिटिल-एंडियन बाइट ऑर्डर का उपयोग करता है।
- नकारात्मक संख्याओं को इसके 2 के पूरक प्रतिनिधित्व में बदल दिया जाता है।
- लघु और लंबे फ्लोटिंग-पॉइंट नंबरों को क्रमशः 32 या 64 बिट्स का उपयोग करके दर्शाया जाता है।
निम्नलिखित कार्यक्रम परिभाषित निर्देश के उपयोग को दर्शाता है -
section .text
global _start ;लिंकर के लिए घोषित (gcc)
_start: ;लिंकर प्रवेश
mov edx,1 ;message length
mov ecx,choice ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;सिस्टम कॉल नंबर। (sys_write)
int 0x80 ;call kernel
mov eax,1 ;सिस्टम कॉल नंबर। (sys_exit)
int 0x80 ;call kernel
section .data
choice DB 'P'
जब उपरोक्त कोड संकलित और रन किया जाता है, तो यह निम्नलिखित परिणाम प्राप्त होता है -
P
UNINITIALIZED डेटा के लिए भंडारण स्थान आवंटित करना
आरक्षित निर्देशों का उपयोग बिना डेटा के स्थान को दुबारा यूज़ के लिए किया जाता है। आरक्षित निर्देश एक एकल ऑपरेंड लेते हैं जो आरक्षित होने के लिए अंतरिक्ष की इकाइयों की संख्या को निर्दिष्ट करता है। प्रत्येक परिभाषित निर्देश में संबंधित आरक्षित निर्देश है।
रिजर्व निर्देश के पांच बुनियादी प्रकार
Directive | Purpose |
---|---|
RESB | Reserve a Byte |
RESW | Reserve a Word |
RESD | Reserve a Doubleword |
RESQ | Reserve a Quadword |
REST | Reserve a Ten Bytes |
Multiple Definitions
आपके पास एक कार्यक्रम में कई डेटा परिभाषा विवरण हो सकते हैं। उदाहरण के लिए −
choice DB 'a' ;ASCII of y = 79H
number1 DW 12345 ;12345D = 3039H
number2 DD 12345679 ;123456789D = 75BCD15H
असेंबलर कई चर परिभाषाओं के लिए सन्निहित स्मृति आवंटित करता है।
Multiple Initializations
टाइम्स निर्देश एक ही मूल्य के लिए कई इनिशियलाइज़ेशन की अनुमति देता है। उदाहरण के लिए, आकार 9 के अंक नाम के एक सरणी को निम्न कथन का उपयोग करके शून्य पर परिभाषित और आरंभ किया जा सकता है−
उदाहरण
section .text
global _start ;लिंकर के लिए (ld)
_start: ;linker entry point
mov edx,9 ;लंबाई
mov ecx, atype ;write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;सिस्टम कॉल नंबर। (sys_write)
int 0x80 ;call kernel
mov eax,1 ;सिस्टम कॉल नंबर। (sys_exit)
int 0x80 ;call kernel
section .data
atype times 9 db 'a'
जब उपरोक्त कोड असेम्ब्ल और निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम का उत्पादन करता है −
aaaaaaaaa