2013-10-12 8 views
5

मैं वर्तमान में कक्षा के लिए एआरएम असेंबली सीख रहा हूं और एक समस्या में आया हूं जहां मुझे "सरणी" का उपयोग करने की आवश्यकता होगी। मुझे पता है कि एआरएम में एक सरणी जैसी कोई चीज नहीं है इसलिए मुझे अंतरिक्ष आवंटित करना होगा और इसे एक सरणी के रूप में देखना होगा। मेरे पास दो प्रश्न हैं।एआरएम असेंबली में सरणी कैसे व्यवस्थित करें?

  1. क्या मैं सरणी में नए मान सही ढंग से जोड़ रहा हूं या क्या मैं केवल पिछले मान को ओवरराइट कर रहा हूं? यदि मैं मूल्यों को ओवरराइट कर रहा हूं, तो मैं नए मान जोड़ने के बारे में कैसे जा सकता हूं?
  2. मैं सरणी के विभिन्न मानों के माध्यम से लूपिंग के बारे में कैसे जा सकता हूं? मुझे पता है कि मुझे loop: का उपयोग करना है, लेकिन यह नहीं पता कि विभिन्न "इंडेक्स" तक पहुंचने के लिए इसका उपयोग कैसे किया जाए।

अभी तक, यह मुझे एआरएम दस्तावेज पढ़ने से प्राप्त हुआ है जैसा कि मैंने ऑनलाइन संसाधनों से एकत्र किया है।

 .equ SWI_Exit, 0x11 

     .text 
     .global _start 

_start: .global _start 
     .global main 

     b  main 

main: 
     ldr  R0, =MyArray 
     mov  R1, #42 
     str  R1, [R0], #4 
     mov  R1, #43 
     str  R1, [R0], #4 
     swi  SWI_Exit 

MyArray: .skip 20 * 4 
     .end 

एक तरफ ध्यान दें के रूप में, मैं ARMSim# उपयोग कर रहा हूँ के रूप में मेरे प्रोफेसर के लिए आवश्यक है, तो जीएनयू उपकरण द्वारा मान्यता प्राप्त कुछ आदेश ARMSim # द्वारा मान्यता प्राप्त नहीं किया जाएगा, या कम से कम मुझे विश्वास है कि मामला है। कृपया मुझे सुधारें अगर मैं गलत हूं।

+1

डाउन वोट क्यों? हां, यह आंशिक रूप से होमवर्क से संबंधित है लेकिन मैं यह जानकारी दूसरों के लिए उपयोगी होने देख सकता हूं और मैं नहीं पूछ रहा हूं कि मेरा असाइनमेंट कैसे करें। – allejo

+0

यदि आप इसे इस तरह से बताना चाहते हैं तो किसी भी प्रोसेसर परिवार में सरणी जैसी कोई चीज नहीं है। Arrays वास्तव में मौजूद नहीं है, वे सिर्फ स्मृति की एक ब्लॉब है जो कहीं से शुरू होता है। कई निर्देश सेट, निश्चित रूप से हाथ, एक रजिस्टर ऑफसेट एड्रेसिंग मोड का समर्थन करते हैं जो आपको एक सरणी का शुद्ध अनुभव प्राप्त करने की अनुमति देता है। मैं भविष्य में आपके द्वारा किए गए बयान को सावधान कर दूंगा। –

+0

@ ड्वाल्च आह नोट के लिए धन्यवाद, मेरी समझ के साथ बहुत मदद की। मैं यह भी ध्यान में रखूंगा कि उन्हें एक सरणी नहीं कहने के लिए – allejo

उत्तर

2
  1. आप केवल तत्वों को ओवरराइट कर रहे हैं। इस स्तर पर "सरणी जैसी चीजें" हैं, लेकिन केवल निश्चित आकार के, पूर्ववर्ती सरणी हैं। .skip फिक्स्ड-साइज सरणी आवंटित कर रहा है। * एक चर-आकार, बढ़ने योग्य सरणी आमतौर पर ढेर या ढेर का उपयोग करके अधिक जटिल डायनैमिक मेमोरी आवंटन कोड के साथ कार्यान्वित की जाएगी।
  2. यदि आपके पास loop: जैसे लेबल था (वास्तविक नाम मनमाना है) तो आप b loop का उपयोग करके इसे (वापस) कर सकते हैं। (शायद, आप सशर्त शाखा क्या करना चाहते हैं ताकि कार्यक्रम पाश नहीं था हमेशा के लिए।) आप R0, बदलकर पाश में विभिन्न तत्वों का उपयोग कर सकते हैं जो आप पहले से ही

इसके अलावा b main प्रतिसाद नहीं कर रहे हैं ' वास्तव में किसी भी उद्देश्य की सेवा नहीं कर रहा है क्योंकि वह अगले निर्देश के लिए शाखा बना रहा है। अगर आप इसे हटा देते हैं तो कोड वही काम करेगा।

[*] वैकल्पिक रूप से, आप कह सकते हैं कि आपके सरणी सिर्फ और R0 (स्मृति R0 अंक को शामिल नहीं) के बीच तत्व है, जो में, R0 बदलकर आप सरणी का विस्तार कर रहे हैं। लेकिन अधिकतम आकार अभी भी .skip निर्देश द्वारा तय किया गया है।

+0

आपके स्पष्टीकरण के लिए धन्यवाद, यह नहीं पता था कि 'लूप:' मनमाने ढंग से था। त्वरित सवाल, मैं विभिन्न तत्वों तक पहुंचने के बारे में कैसे जाउंगा? – allejo

+1

शायद आप 'R0' myArray (जैसे' R0 LDR, = MyArray' या 'एडीआर R0, MyArray') तो' str rx तरह बातें, [R0, # 4] 'या' str rx, [R0 पर इंगित करना चाहते हैं , आर 2] 'जहां' आर 2 'के मान 0, 4, 8, जैसे हैं ... – scott

संबंधित मुद्दे