.global main, Stop, CodeEnd, DataStart, DataEnd .global head main: movw r0, #:lower16:head movt r0, #:upper16:head // r0 = addr(head) ldr r0, [r0] // r0 = head = addr(1st list elem) ldr r1, [r0] // r1 = head.value1 ldrsh r2, [r0,#4] // r2 = head.value2 ldrsh r3, [r0,#6] // r3 = head.value3 ldr r0, [r0,#8] // r0 = head.next = addr(2nd list elem) ldr r4, [r0] // r4 = head.next.value1 ldrsh r5, [r0,#4] // r5 = head.next.value2 ldrsh r6, [r0,#6] // r6 = head.next.value3 ldr r0, [r0,#8] // r0 = head.next.next // = addr(3rd list elem) !!! ldr r7, [r0] // r7 = head.next.next.value1 ldrsh r8, [r0,#4] // r8 = head.next.next.value2 ldrsh r9, [r0,#6] // r9 = head.next.next.value3 ldr r0, [r0,#6] // r0 = head.next.next.next Stop: nop CodeEnd: /* ************************************************************** Permanent variables ************************************************************** */ .data .align 12 DataStart: // list structure is: [int value1, short value2, short value3, next] p0: .4byte 333 // Object [333,23,33,p2] .2byte 23, 33 .4byte p2 .skip 4 // gap p1: .4byte 111 // Object [111,21,31,p3] .2byte 21, 31 .4byte p3 p2: .4byte 444 // Object [444,24,34,p4] .2byte 24, 34 .4byte p4 .skip 4 // gap p3: .4byte 222 // Object [222,22,32,p2] .2byte 22, 32 .4byte p0 .skip 4 // gap p4: .4byte 555 // Object [555,25,35,null] .2byte 25, 35 .4byte 0 head: .word p1 // head contains the address of the first list elem // head->[111,21,31]->[222,22,32]->[333,23,33]-> // ->[444,24,34]->[555,25,35] DataEnd: .end