.global _start .section .data value: .byte 42 .text _start: ldr r1, =value mov r0, #9 @ r0 is now 9 strb r0, [r1], #0 @ store the register r0 to the address in r1 add r0, r0, r0 @ r0 is now 18 ldrb r0, [r1], #0 @ load the byte at address r1 to r0 mov r7, #1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
We initialise r0, and store it to memory, and then double the value of r0, and then read back from memory to r0.
Our return code (the value of r0) is the same as that stored rather than the doubled version.
By implication, our store and load were executed correctly.
If implication is suspicious, then it is possible to walk through the code using gdb to verify.
bob@poland:~/www/examples$ make movtest2 /usr/bin/as -gstabs -o movtest2.o movtest2.s /usr/bin/ld -o movtest2 movtest2.o bob@poland:~/www/examples$ ./movtest2 bob@poland:~/www/examples$ echo $? 9 bob@poland:~/www/examples$
No comments:
Post a Comment