/* first attempt */ start: /* zero out all the registers */ mov r2, #0xffffffff mov r3, #0xffffffff mov r4, #0xffffffff mov r5, #0xffffffff mov r6, #0xffffffff mov r7, #0xffffffff mov r8, #0xffffffff mov r9, #0xffffffff mov r10, #0xffffffff mov r11, #0xffffffff mov r12, #0xffffffff mov r13, #0xffffffff reset: mov r0, #(end - start) mov r1, #64 slam: /* pick a spot and slam it */ /* grow outwards from the core of the program, alternating forward then back */ add r14, pc, r0 stmia r14!, { r2-r13 } stmia r14, { r2-r13 } sub r14, pc, r0 stmia r14!, { r2-r13 } stmia r14, { r2-r13 } add r0, #((31 * 4)) subs r1, #1 bgt slam relocate: sub r0, pc, #(. + 8 - start) add r1, r0, #(end - start) ldr r14, =(5163*4) add r14, r0, r14 /* relocate ourself forward */ and r14, #(~0x80000000) /* dont get close to device space */ _relloop: ldr r2, [r0], #4 str r2, [r14], #4 cmp r0, r1 bne _relloop mov r2, #0xffffffff nextslam: /* branch to start in the relocated spot */ sub pc, r1, #(end - reset) literals: .ltorg end: