I am interested in writing some cell phone apps in ARM assembly language. I would like to write them for Apple I phone 6 and Android Samsung S5. I am very familiar with writing in Assembly language on the IBM main frame and X86 personal computers. What learning materials are available from ARM to help me learn ARM assembly language. I also need to know the software and hardware required to assemble the apps.
Hand-written Assembly code is ALWAYS faster and/or smaller than the equivalent compiled code, as long as the programmer understands the many intricate details of the CPU.
In my experience well written C code is nearly always a better alternative, and if you invest time in writing C really well (i.e. the same time you would have spent writing a hand tuned assembly version) the compiler will generally beat you.
but anyone that has actually tested this theory knows how wrong this statement is!
If you throw "bad C" at the compiler it can't work miracles. If you write the same algorithm in C code and in assembler (i.e. write the performance critical C like you would write assembler so the compiler "knows" what you know about the assumptions it is allowed to make), in 99% of times the compiler will beat your assembler. Unless you are doing something very specialist with NEON or DSP instructions there is usually an almost 1:1 equivalence between what you can do in C and assembler - the only time the compiler generally loses is when the C version is some reference algorithm implementation, so the two are not really equivalent at all ...
Reasons for this:
There are of course some exceptions - I still find writing NEON code in assembler (or C intrinsics) is a far more reliable means to write vector code than letting the compiler auto-vectorize - but the number of cases where you actually need to use this is rare (media codecs and image processing for the most part).
Pete