Ehm, no, once you are in assembly, you do whatever you want to do. There is no compiler to mess things up for you. (Although, it's leaving that to you hehe... :-)
I think the compiler still needs to know that the value might be modified from the outside. Otherwise it might optimize the read operation away from the codepath.
You'd have to do all the reads in ASM too then, but it would still be possible. It'd be terrible ergonomically.
At that point you’re really not writing C++ at all; you’re writing assembly in a .cpp file.
Nah. You could just define an inline function that'd do volatile read or write of a particular type. You don't have to hit assembly all the time.
Yes, that is part of creating inline assembly in C or C++ code: