Assembly ist vor allem interessant, um ein Gefühl für die "Hintergrundmagie" der höheren Programmiersprachen zu bekommen - Pointer, Referenzen, Pointer-auf-Pointer und weitere "schlimme Dinge" sehen in Assembly ganz anders aus. Das trägt erfahrungsgemäß schon zum Verständnis bei.
Allerdings eignet sich Assembly nicht soo wirklich als Einsteigersprache und/oder um die Konzepte der Programmierung zu erklären
Was die einzelnen Assembler angeht:
Es gibt halt Maschinencode - das ist die Form, die man direkt an die CPU verfüttern kann. Biologische Lebensformen haben aber meist das Manko, sich diese simplen Sachen nicht merken zu können und erfanden sich "Mnemonics" - also lesbare Formen, die (meist) 1:1 auf einen Maschinencode abbilden (z.B ADD Register1, 10 <=> 48 05 0a 00 00 00)
Assembler sind quasi solche Mnemonic->Maschinencode Übersetzer, allerdings oft mit zusätzlichen Features und Syntax (angefangen mit Variablendeklarierung über Prozeduren/Funktionen bis hin zu While/For Macros und weiteren Automatismen wie der Sicherung/Wiederherstellung der Register nach einem Prozeduraufruf)
TASM/MASM sind jeweilige Programme von Borland/MS mit eigenen Erweiterungen und Syntaxeigenheiten.
TASM lebt nur noch in alten Büchern und Tutorials weiter
wikipedia hat gesagt.:
The latest version of Turbo Assembler is 5.0, with files dated 1996 and patches up to 2002; it is still supplied with Delphi and C++Builder.
sowie in "Kompatibilitätsmodi" anderer Assembler.
MASM wird oft im Zusammenhang mit MASM32 erwähnt - das ist ein "fertiges" Packet für Assembly-unter-Windows. Es "lebt" immer noch (wird mit Microsofts SDKs/Compilern ausgeliefert) und damit lässt sich auch wirklich etwas außerhalb der DOS-Box programmieren
NASM ist der "plattformübergreifende" (im Sinne, dass NASM selbst auch auf Linuxkisten, Mac oder BSD verfügbar ist) Open Source Assembler.
MASM und NASM, sind wie im vorherigen Posting erwähnt, Assembler für die "klassische Desktop/Laptop-CPUs" (also sogenannte "x86, i386, IA-32, AMD64, 0x86-64" - historisch bedingt gibts halt viele Bezeichnungen).
NASM wird auch oft als "Lehrsprache" für Low-Level-Prorgrammierung eingesetzt:
PC Assembly Language
für beide findet sich relativ viel Zeug im Netz.
Weitere Assembler wie FASM/WASM oder GAS sind etwas spezifischer - zumindest aber deutlich schlechter dokumentiert und nur für erfahrene Asm-Entwickler vom Interesse.
Comparison of assemblers - Wikipedia, the free encyclopedia
Der praktische Einsatz auf "Desktop" sollten mittlerweile Nischenfälle (z.B Booloader - siehe Grub, TrueCrypt) oder Optimierugen sein.
Optimierungen sind zwar ganz lustig - allerdings oft nur dadurch, dass die "Mainstreamcompiler" die "ich setze es mal in Asm um, ist automatisch schneller!" Illusion schnell wieder zerstören

.
Um einen aktuellen GCC/Clang/Intel Compiler erfolgreich zu übertrumpfen, muss man in der Regel jede Menge über die konkrete Zielplattform wissen (Pipe, Cache) und braucht die nette "Referenztabelle" (eher ein Buch) vom CPU-Hersteller mit Timings und Abhängigkeiten der einzelnen Anweisungen.