ARM GAS  array-ldr2.s 			page 1


   1              	/* --------------------------------------------------
   2              	   Define required labels for EGTAPI
   3              	   -------------------------------------------------- */
   4              	        .global main, Stop, CodeEnd
   5              		.global DataStart, DataEnd
   6              	
   7              		.global i1, i2, s1, s2, b1, b2	
   8              	
   9              	/* --------------------------------------------------
  10              	   Access A[k] (byte), B[k] (short) and C[k] (int)
  11              	   -------------------------------------------------- */
  12              		.text
  13              	main:
  14              	// ============================================================ A[3]
  15 0000 000000E3 		movw	r0, #:lower16:A
  16 0004 000040E3 		movt	r0, #:upper16:A		// r0 = base address of array A
  17              	
  18 0008 001000E3 		movw	r1, #:lower16:k
  19 000c 001040E3 		movt	r1, #:upper16:k		// r1 = address of k
  20 0010 001091E5 		ldr	r1, [r1]		// r1 = value in variable k
  21              						// Comment: use ldrsh if k is short !
  22              						//          use ldrsb if k is byte !
  23              	
  24              						// Address of A[3] = base addr + k*1
  25 0014 D12090E1 		ldrsb   r2, [r0, r1]		// Load A[k] into r2
  26              	
  27              	// ============================================================ B[3]
  28 0018 000000E3 	        movw    r0, #:lower16:B
  29 001c 000040E3 	        movt    r0, #:upper16:B         // r0 = base address of array B
  30              	
  31 0020 001000E3 	        movw    r1, #:lower16:k
  32 0024 001040E3 	        movt    r1, #:upper16:k         // r1 = address of k
  33 0028 001091E5 	        ldr     r1, [r1]                // r1 = value in variable k
  34              	                                        // Comment: use ldrsh if k is short !
  35              	                                        //          use ldrsb if k is byte !
  36              	
  37              	                                        // Address of B[3] = base addr + k*2
  38 002c 011081E0 		add	r1, r1, r1		// r1 = k+k = 2*k
  39 0030 F13090E1 	        ldrsh   r3, [r0, r1]            // Load B[3] into r3
  40              	
  41              	// ============================================================ C[3]
  42 0034 000000E3 	        movw    r0, #:lower16:C
  43 0038 000040E3 	        movt    r0, #:upper16:C         // r0 = base address of array C
  44              	
  45 003c 001000E3 	        movw    r1, #:lower16:k
  46 0040 001040E3 	        movt    r1, #:upper16:k         // r1 = address of k
  47 0044 001091E5 	        ldr     r1, [r1]                // r1 = value in variable k
  48              	                                        // Comment: use ldrsh if k is short !
  49              	                                        //          use ldrsb if k is byte !
  50              	
  51              	                                        // Address of C[3] = base addr + k*4
  52 0048 011081E0 		add	r1, r1, r1		// r1 = k+k = 2*k
  53 004c 011081E0 		add	r1, r1, r1		// r1 = 2*k + 2*k = 4*k
  54 0050 0C4090E5 	        ldr     r4, [r0, #12]           // Load C[3] into r4
  55              	
  56              	
  57              	Stop:
ARM GAS  array-ldr2.s 			page 2


  58              	CodeEnd:
  59 0054 0000A0E1 	    	nop
  60              	
  61              	/* --------------------------------------------------
  62              	   Begin of the permanent program variables
  63              	   -------------------------------------------------- */
  64              		.data
  65              	DataStart:
  66              	
  67 0000 0B0C0D0E 	A:	.byte   11, 12, 13, 14, 15     // byte typed initialzied array A 
  67      0F
  68              	
  69 0005 00       		.align 1
  70 0006 6F007000 	B:	.2byte  111, 112, 113, 114, 115 // short typed initialzied array B 
  70      71007200 
  70      7300
  71              	
  72              		.align 2
  73 0010 57040000 	C:	.4byte  1111, 1112, 1113, 1114, 1115 // int typed initialzied array C 
  73      58040000 
  73      59040000 
  73      5A040000 
  73      5B040000 
  74              	
  75              	
  76 0024 03000000 	k:	.4byte  3
  77              	
  78              	DataEnd:
  79              	
  80              		.end
ARM GAS  array-ldr2.s 			page 3


DEFINED SYMBOLS
        array-ldr2.s:13     .text:0000000000000000 main
        array-ldr2.s:57     .text:0000000000000054 Stop
        array-ldr2.s:58     .text:0000000000000054 CodeEnd
        array-ldr2.s:65     .data:0000000000000000 DataStart
        array-ldr2.s:78     .data:0000000000000028 DataEnd
        array-ldr2.s:67     .data:0000000000000000 A
        array-ldr2.s:15     .text:0000000000000000 $a
        array-ldr2.s:76     .data:0000000000000024 k
        array-ldr2.s:70     .data:0000000000000006 B
        array-ldr2.s:73     .data:0000000000000010 C
        array-ldr2.s:69     .data:0000000000000005 $d

UNDEFINED SYMBOLS
i1
i2
s1
s2
b1
b2
