Assembly Arrays - परिभाषा सिंटैक्स उपयोग और उदाहरण

Prahlad Godara ------ From DOOSEEP


एक ही प्रकार के कई डेटा को एक साथ स्टोर करने के लिए असेंबली भाषा में Arrays का उपयोग किया जाता है। यानी आप इसे एक टेबल या लिस्ट के रूप में मान सकते हैं जो समान आकार और प्रकार के डेटा को स्टोर करती है। जैसे एक Variable में एक Data का Address होता है। इसी प्रकार सरणी(arrays) में एकाधिक डेटा का पता होता है जिसे आप इंडेक्स के माध्यम से वापस प्राप्त कर सकते हैं।

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

जैसा कि वेरिएबल में प्रारंभिक मान हेक्साडेसिमल, दशमलव या बाइनरी फॉर्म में निर्दिष्ट किया जाता है।

उदाहरण के लिए, हम एक शब्द वेरिएबल 'महीने' को निम्न में से किसी भी तरीके से परिभाषित कर सकते हैं -
 MONTHS DW 12
      MONTHS DW 0CH
      MONTHS DW 0110B 

इसी तरह डेटा डेफिनिशन इंस्ट्रक्शंस का इस्तेमाल एक-आयामी सरणियों (arrays) को परिभाषित करने के लिए भी किया जा सकता है।.

असेंबली लैंग्वेज में एरे को define करना।

ऐरे में प्रत्येक तत्व के आकार को परिभाषित करने के लिए एक असेंबली भाषा निर्देश की आवश्यकता होती है। सबसे पहले पहचानकर्ता चर होता है, फिर डेटा प्रकार होता है और फिर मूल्य सूची होती है।

 identifier: datatype item 1 , item 2 , item 3 , item 4 , 

हम आगे इस एक आयामी शब्द सरणी को बनाते हैं। जिनमें से प्रत्येक तत्व 2 बाइट लंबा है और 'AbList' को इसके पहचानकर्ता के रूप में असाइन किया गया है। DW अनुदेश शब्द के लिए डेटा प्रकार है:

संख्याओं की one dimensional array परिभाषित करें।

 AbList :  DW  84,  35,  57,  27,  15, 29 

उपरोक्त परिभाषा 84, 35, 57, 27, 15, 29 की संख्या से शुरू होने वाले प्रत्येक छह शब्दों की एक सरणी घोषित करती है। यह सन्निहित मेमोरी स्पेस के 2x6 = 12 बाइट्स आवंटित करती है। पहले नंबर का कोडेड पता AbList होगा और दूसरे नंबर का कोडेड पता AbList + 2 और इसी तरह होगा।

आप इसे ऐसे भी कर सकते हैं। और सभी मानों को शून्य से प्रारंभ कर सकता है, जैसे -

  INVENTORY   DW  0
    DW  0
    DW  0
    DW  0
    DW  0
    DW  0
    DW  0
    DW  0 

और इस तरह भी। TIMES का उपयोग करते हुए, इन्वेंटरी सरणी को इस प्रकार बनाया जा सकता है:

  INVENTORY TIMES 8 DW 0 

TIMES निर्देश का उपयोग समान मान के लिए एकाधिक इनिशियलाइज़ेशन के लिए भी किया जा सकता है।

असेंबली में ऐरे से डेटा मान प्राप्त करना

ऐरे तत्वों तक पहुँचने के लिए, हम उस तत्व के लिए एक पॉइंटर प्राप्त करते हैं जिसे हम एक्सेस करना चाहते हैं। फिर आप इंडेक्स के जरिए डेटा वापस पा सकते हैं।

कोड का निम्न स्निपेट दिखाता है कि यह कैसे करना है।

  mov ecx, [esi];pointer to element at the 0th index stored in the register ecx
  mov ecx, [esi+1];pointer to element at the 3rd index stored in the register ecx
  mov ecx, [esi+2];pointer to element at the 2nd index stored in the register ecx

Assembly Arrays - Example

निम्नलिखित उदाहरण एक 3-तत्व सरणी x को परिभाषित करके उपरोक्त अवधारणाओं को प्रदर्शित करता है जो तीन मानों को संग्रहीत करता है: 1, 4, और 3। यह मानों को सरणी में जोड़ता है और योग 8 प्रदर्शित करता है।


  section	.text
   global _start   ;must be declared for linker (ld)
	
_start:	
 		
   mov  eax,3      ;number bytes to be summed 
   mov  ebx,0      ;EBX will store the sum
   mov  ecx, a     ;ECX will point to the current element to be summed

top:  add  ebx, [ecx]

   add  ecx,1      ;move pointer to next element
   dec  eax        ;decrement counter
   jnz  top        ;if counter not 0, then loop again

done: 

   add   ebx, '0'
   mov  [sum], ebx ;done, store result in "sum"

display:

   mov  edx,1      ;message length
   mov  ecx, sum   ;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
global x
a:    
   db  1
   db  4
   db  3

sum: 
   db  0

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

 8

द्वि-आयामी सरणी (array) भी समान है, लेकिन डेटा पते के बजाय, इसमें एक और 1-आयामी सरणी (array) का पता है। एक 2 आयामी सरणी (array) 1 आयामी सरणी (array) सूची सूची का एक सेट है। जिसमे array के अंदर array होता है और फिर data होता है.



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