Appendix D. Differences between Masm 6 and Masm 8

Asmc Macro Assembler

Appendix D. Differences between Masm 6 and Masm 8

This is not strictly JWasm-related, but since a lot of documentation that can be found about Masm still refers to Masm v6 or Masm v6.1 only, it's useful to list the differences.
  • default output format has been changed from OMF to COFF in Masm 8.
  • expression evaluator calculations are done in 64-bit instead of 32-bit. This is not always reflected in the listing file, where the values may be truncated to 32-bit.
  • some segment attributes have been added in Masm 8 to cover the COFF section attribute bits. These are:
    • INFO
    • DISCARD
    • NOCACHE
    • NOPAGE
    • SHARED
    • EXECUTE
    • READ
    • WRITE
    • ALIAS
    • ALIGN
  • the -safeseh commandline option and the .SAFESEH directive have been added in Masm 8.
  • Masm 8 understands a few new data types:
    • OWORD - 128-bit integer
    • MMWORD - 64-bit data type for MMX
    • XMMWORD - 128-bit data type for SSE
  • several unary operators are new for Masm 8:
    • LOW32 - returns the lower 32-bit of an expression
    • HIGH32 - returns the upper 32-bit of an expression
    • IMAGEREL - returns the image relative offset of an expression (aka RVA). COFF format only.
    • SECTIONREL - returns the section relative offset of an expression. COFF format only.
    Please note: LOW32 and HIGH32 operators won't accept plain numbers with values that exceed 32-bits.
  • Masm 8 understands instruction sets up to SSE3. The last version of Masm 6, version 6.15, supports SSE2 only. Masm 8 also understands Intel's VMX and AMD's SVM extensions ( x86 virtualization ).
  • Masm 8 needs at least Windows 2000, it won't run on Windows 9x (without hacks).
  • Masm 8 needs a MS VC runtime dll - MSVCR80.DLL - to run, while Masm 6 was a stand-alone binary.
  • Finally, Masm 8 fixes some bugs and introduces a few new ones. One of the new bugs is that Masm 8 has problems with wildcards in filenames; entering
    ml.exe -c *.asm
    to assemble all assembly files in a directory won't work as expected.