Having written 10Ks of lines of macros (not assembler code, macros), it's not hard to apply high level techniques to masm. it makes writing masm a lot easier. forget sub-classing and inheritance and such, though.
probably the biggest thing to discover is that electronic circuits are inherently parallel systems while much code is inherently sequential. I've done many many years of systems software design where asyncronous behavior is common but even then, I find it easy to slip into a sequential way of thinking.
If you are focussing on microcontrollers, you will also discover how resource constrained they are compared to a modern PC or above. small amounts of RAM, limited program sizes (though changing rapidily), low level interfaces and so on will challenge the way you think about programming.
another area that was a suprise to me is how noise and other effects can make your circuits behave differently from the theory. in (non-systems) software, programs are highly deterministic - same input = same output, every time. In circuits, you may not know all the sources of input (noise) and thus not be able to easily predict the output. Once your start thinking about those sorts of things, the circuits become easier to understand and design.
If you are looking at linear circuits, it'd play with a simulator (ltspice from linear tech is good) to get a better feeling for how things work.
Any way, welcome to the club and have fun.
Phil