Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Explaining how the MASM 2-pass assembler works (os2museum.com)
56 points by rwmj on Sept 12, 2021 | hide | past | favorite | 12 comments


MASM 1.0 had a linear symbol table, which meant it quickly got excruciatingly slow as the file size increased.

MASM also uses the syntax one finds in the Intel CPU reference manuals. This is also done in the inline assembler for my compilers.

The gnu assembler syntax reverses the operands, which reverses the operands. This drives me crazy because assembler is hard enough without all the bugs from putting the operands in the wrong order.

Besides, I much prefer to be able to compare my assembler code with the Intel CPU specification.


Angels die when AT&T syntax is used. I genuinely hate it.


One day I had the stupid idea to replace the nasm macros of my toy compiler with generated Assembly directly, and to reduce dependencies rely on gas, back when Intel syntax was hardly supported, so AT&T it was.

Never again.


I strongly agree with your last sentence, but the issue goes beyond operand order: the addressing syntax for AT&T is nigh incomprehensible to me.


Using a 'JMP SHORT' was pretty much reflexive; a good reason to do it was it not being in range was sort of a code smell back in the day.

But chips were simpler back then, and a programmer could often leave compiler code in the dust with small bits of assembler (esp. where Fortran was involved).

Nowadays, X86 has become so hard to reason about from a performance point of view that for critical code I just assume that GCC will emit something acceptable given a bit of sensibly-written C, and that to get a big boost beyond that is going to involves GPUs or custom silicon (depending on the application).


very true, esp when using const, static or restrict correctly


Since it's not completely spelled out in the article, MASM was (is?) the Microsoft Macro Assembler. This is an x86 assembler that's been around since pretty much the beginning of the architecture.


> (is?)

Yes, it still is. It's no longer supplied separately and instead is included in Visual Studio (or in the "Build Tools for Visual Studio"), but it is still there. Newer, 64-bit, version is called ML64 but still referred to as MASM/Macro Assembler.


>Yes, it still is. It's no longer supplied separately

well, it kinda/sorta is? https://www.masm32.com/

Though that's just about as unofficial as it gets!


I rather use the official one on the Windows SDK.

https://docs.microsoft.com/en-us/cpp/assembler/masm/microsof...


Anyone have thoughts on MASM compared to FASM?


Yes. The flat assembler is much more useful. I can use it to produce executables for Linux, BSD and Windows.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: