Originally Posted by johnsfine
Even if you will never write a useful line of asm code, learning to code in asm with an OS, is a valuable skill that will improve the quality of your programming in languages like C++ as well as your skill at debugging.
Learning to code in asm without an OS would mostly be useful if you intend someday to write or significantly modify an OS. (I myself have done so, but don't expect to do so again).
Coding and debugging C++ is a more commonly useful skill than modifying an OS. So asm with an OS is more relevant knowledge than asm without an OS.
says is all true, but ignores that there are other architectures than X86 Linux. There are many architectures for which assembly is either the best or only choice, as well as other architectures which are easier to learn and experiment with. Many of these are supported with emulators such as Qemu, which further simplifies the process (overlooking a small amount of initial setup pain, maybe).
It think it bears emphasizing that there is a difference between learning a CPU instruction set, and learning assembly language programming. Much of the idiom of assembly language programming is transportable across CPUs. Even though the instruction sets may vary, the concepts are fairly consistent, and simply understanding how low level language constructs compare to relatively higher level languages is a valuable piece of knowledge.
I would tend to put more emphasis on interfacing assembly language to a high level language compiler, than to an OS. I say this as a matter of pragmatism, as well as a matter of academics. Being able to code a function/subroutine in assembler, and understanding the use of the interface to a high level language is not significantly unlike the interface to an OS. On many architectures, there is no OS, but there may well be a C compiler, or other compiler. It may also be useful to code in assembler for such things as optimization of code (I know GNU C is hard to beat, but not all compilers are GNU C), or to access hardware in ways not supported by a high level language.
I say all of this to suggest that MTK358
examine the real reason(s) for wanting to learn assembler coding, and base his choice of training architecture on his needs/wants, more than on what future there is in assembly language for Linux X86.