A Whirlwind Tour of ARM Assembly
coranac.com
coranac.com
I have been hacking Assembler level on many different architectures. Cortex M0 is the first one where I actively try to avoid it. It's just no fun.
There isn't a single ARM instruction set, as it is with x86, for exmple. There are many different versions of it. Sometimes there are even significant variations within a family. e.g. Cortex M0 lacks many useful instructions that are only available in the M3/M4.
The main difference is that x86 doesn't have low power processors like the Cortex M series so they didn't have to remove any instructions to lower die size (thus price and power consumption).
If you keep switching between different Cortex-M cores and have difficulty keeping track of the available instructions, this wikipedia page[0] summarizes things in a nice short table.
[0] https://en.wikipedia.org/wiki/ARM_Cortex-M#Instruction_sets
x86 is... like someone started with a simple mud hut and tried to turn it into a mansion by successively hot-gluing renovations to it over 30 years. There's really a tiny modernised flat buried somewhere in there which provides all the light and heat and amenities, but there's plasterboard all around it because they're trying to pretend it's really still the same old mud hut with a fancier roof. Truth is, the mud hut fell down decades ago and now it's all glue, duct tape and make-believe.
(I think my analogy got lost somewhere along the way there, but that's kind of my point. Bloody μ-ops.)
Is there a good and more up-to-date introductive text?
Just think about readibility of Ada and Perl. What increases with higher abstraction levels is mainly the development speed.