एक ही प्रकार के कई डेटा को एक साथ स्टोर करने के लिए असेंबली भाषा में 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 होता है.