Right now I am using IWBasic from Ionic Wind Software and Code Blocks IDE with MinGW/GNU GCC C/C++ for Windows/Linux. I used to write software for various large government programs, but found most of my clients settling on Windows (98% versus 2% for Linux varieties). Therefore, it makes economical sense for me to spend most of my time developing in the Windows environment. So, although the native assembler used in the Code Blocks/MinGW/GCC environment is GAS, MinGW also utilizes NASM syntax through plugins or switch selection.
What I teach and write about is kind of weird and counter-intuitive because while most colleges focus on C/C++ for their IT students, the majority of my students are science-oriented or hobby programmers. Therefore, I base most of my courses and books on the structured IWBasic programming language. I use IWBasic because it allows inline assembly statements to be placed right in the code and all inline assembly code is passed directly to the underlying NASM assembler. Therefore, all the syntax is NASM, thus my need to get any NASM code I write nailed down with no errors. Since I'm a physicist and program manager by nature and not a programmer by trade, I need to check in now and then to make sure I get all the code right. Nothing breaks your credibility faster than showing incorrect code that doesn't work like it should.
Additionally, I am writing eight volumes on various programming topics that are in the process of being edited, verified, and published over the next year. Volume 6, Compiler Design Technology is a book about how to develop a 64-bit Ada-like language compiler I call Adagé (Ada - Generic Enhancements). The underlying assembler for this compiler is also NASM. All the assembly language syntax is NASM. All the inline assembly statements follow the NASM syntax.
Finally, NASM macros help me reduce the complexity of certain parsing and scanning tasks. All code emitted by the Adagé compiler follows NASM syntax and then is assembled with NASM and linked using GoLink.
Logman