Yes. Modern processors tend not to have dedicated accumulator registers and such, but rather have a set of registers that are essentially all the same. But as a principle all that you said above is correct. And for certain, the compiler may choose for any number of reasons to put a register in either memory or register, no matter whether you use the register keyword or not [it MAY, at very high warning levels, inform that you are using register when it can't put the variable in a register, but I think most compilers don't].
I would certainly recommend to NOT use the register keyword EVER in new code. It doesn't help.
--
Mats