I already have a Arduino which I can use for AVR
So what are you waiting for? Get reading, get programming. Some things will be great, some not so great. And you'll be in a much better position to evaluate your THIRD architecture (ARM, MSP430, MIPS, whatever.)
A person's second assembly language is usually the most educational. Or it should be!
1. Accumulator - AVRs have 32 general purpose registers, and most instructions can use any of them as target (and source). Some are fixed though.
2. Paging - AVR has flat address space
Hmm. Marketing talk. AVRs have 16 general purpose registers, and an additional 16 less-general-purpose registers. And a few (different numbers on different chips) that combine into 16-bit pointers. And no paging until you exceed 64kB of RAM or 128kB of instructions.
Also how is the AVR ASM? Or rather maybe I mean to say how does the AVR ASM flow?
movlw 0xA1
movwf Foo
2 instruction cycles instead of a simple
mov Foo, 0xA1
Still two instructions on an AVR.
ldi r16, 0xA1
sts Foo, r16
Assuming Foo is in RAM. The first instruction is one of the ones where only 16 registers can be used. The second instruction takes two words and two cycles, so IIRC the sequence is bigger than on a PIC (not counting banking.) OTOH, since the AVR has at least 16 registers to hold the A1, you might never need the memory location Foo...
This is an architecture issue rather than an assembler issue; stuff pretty much has to move through registers on both PIC and AVR. The PIC only has the accumulator, the AVR has more.
I think the MSP430 can do this in a single instruction. But the instruction will be three words long and take "many" (4+?) cycles. Aren't there common macros for doing this sort of thing on PIC? ("movlf" was apparently standard in the Parallax PIC assembler, and widely implemented elsewhere.)