Properties of the array and list data structures

  • The array data structure is designed for speed (sacrificing flexibility):

      • Every array element in an array can be access immediately

      • Increasing the size of an array is difficult or even impossible

  • The linked list data structure is designed for flexibility (sacrificing speed):

      • Inserting (= increasing the size) into a linked list is easy

      • Accessing a list element requires traversing (= take time !) the list


  • Accessing data stored in a data structure:

    • How to access data stored in a data structure depends on the structure/organization of the data structure

Review:   how to accessing a simple variable inside data structures

  • A label is used to mark the start of a data structure (called the base address)

  • A simple variable inside a data structure is located a certain number of bytes after the start location:

  • The distance from the start of the data structure is called:  

      • offset                           

  • The address of simple variable inside a data structure is computed as follows:

       address of var in data stru = base address + offset of var
    

(1) How to find the base address of an array

  • Suppose an array A is defined as:

       A:  .skip N    // for any data type of array ! 
    

  • The label A is equal (is a symbolic constant) to the base address of the array !


  • We can obtain the base address of array A into a register rN using the movw + movt instructions:

       // Move the base address of array A into register rN
    
       movw   rN, #lower16:A
       movt   rN, #upper16:A
    

(2) How to find the offset of the ith array element

  • The offset of the array element A[i] = number bytes between the base address and A[i]:

  • Notice:

    • There are i array elements between the base address and A[i]

    • Each array elements has the same number of bytes

(2) How to find the offset of the ith array element

  • The offset of the array element A[i] = i × sizeof(1 array elem):

  • Because:

    • There are i array elements between the base address and A[i]

    • Each array elements has sizeof(1 array elem) bytes

The load instructions of ARM used to access array elements

Recall:

  • The load instruction of ARM has many different syntax formats !!

    (I will need at least 3 lectures to cover all the different formats...)

  • We will limit to the following formats of the load instruction:

         ldr rn, [rm]             // Load from address rm
      
         ldr rn, [rm, #n]         // Load from addr rm with constant offset n
      
         ldr rn, [rm, rk]         // Load from addr rm with variable offset rk
      

We will learn to use the more advanced load instruction formats now to access array variables