Re: Assembler language for embedded systems: please do not
Agreed. I always think of C as the world's first portable assembler. C++, C# have just extended it into the object-oriented approach. There are times, especially in embedded and IoT, where for timing or memory (or parts cost) constraints you actually need assembler, but those cases are rare. Especially if you learn how to code C efficiently (Efficient C by Plum & Brodie is likely out of print, but available for $0.01 on Amazon; there appear to be similar titles for C++). I recall coding a motor inverter on a microcontroller with only 512 bytes of code in C. It needed a couple of lines of assembly to initialize the data structures to save the 50 generated by the compiler, and that was well commented with the replaced lines of C code as the comments and the #asm compiler directive for the initialization assembler code. Could have done it with a separate subroutine and the linker, but didn't want to incur the extra call and return code space overhead. It's certainly a choice for more complicated timing-/space-critical optimizations because it limits what you have to recode on the next machine (although it assumes the next machine needs the same optimizations and can't forsee what else needs to be optimized).