View text source at Wikipedia


Open Watcom Assembler

Open Watcom Assembler
Original author(s)Open Watcom Assembler
Operating systemDOS for x86-based PCs, Microsoft Windows, Linux for x86-based PCs, OS/2 for x86-based PCs, FreeBSD for x86-based PCs.
Available inEnglish
Typex86 assembler
Websitewww.openwatcom.com

Open Watcom Assembler or WASM is an x86 assembler produced by Watcom, based on the Watcom Assembler found in Watcom C/C++ compiler and Watcom FORTRAN 77.[1][2][3] Further development is being done on the 32- and 64-bit JWASM project,[4] which more closely matches the syntax of Microsoft's assembler.[5]

There are experimental assemblers for PowerPC, Alpha AXP, and MIPS.[6]

Technical details

[edit]

Assembler

[edit]

Disassembler

[edit]

There is an associated Watcom disassembler, wdis. The assembler does not have listing facilities; instead the use of wdis for generating listings is recommended.[7] wdis can read OMF, COFF and ELF object files and PE and ELF executables. It supports 16-bit and 32-bit x86 instruction set including MMX, 3DNow!, SSE, SSE2, and SSE3. Support for PowerPC, Alpha AXP, MIPS, and SPARC V8 instruction sets is also built in.[8]

WASM forks

[edit]

JWasm

[edit]

JWasm is a fork of Wasm originated by Japheth with following features:

Japheth paused development (or rather, was out of contact) of JWASM in January 2014 with version 2.12pre, but currently continues work on project on GitHub,[10] current (June 2024) version is 2.18. Also, others on the Masm32 forum[11] picked up where Japheth once left off.

HJWasm

[edit]

HJWasm, adding the prefix H in reference to Masm32 forum member Habran who started off this second WASM development continuation. Version 2.13pre was originally announced in 2016.[12] New features include:

  • SIMD:
  • MMX: MOVQ and added in 2.13, to supplement MOVD.
  • AVX2: VGATHERDPD, VGATHERQPD, VGATHERDPS, VGATHERQPS, VPGATHERDD, VPGATHERQD, VPGATHERDQ, VPGATHERQQ, VEX-encoded general purpose instructions added in 2.13. Remaining instructions added in 2.16.
  • AVX-512: VCMPxxPD, VCMPxxPS, VCMPxxSD, VCMPxxPD, VCMPxxSS, AVX-512F set, EVEX-encoded instructions added in 2.13; VMOVQ added 2.13, to supplement MOVD. Remaining instructions added in 2.16.
  • Random Number Generator: RDRAND, RDSEED added in 2.13.
  • half-precision conversions: F16C(VCVTPH2PS, VCVTPS2PH) added in 2.13.
  • Intel MPX: Added in 2.31.

HASM

[edit]

HASM is a renamed version of HJWASM, starting in version 2.33. The name was used following a MASM Forum discussion thread that originally proposed a replacement name. The name HASM was proposed by forum member habran in Reply #6,[13] and was finalized at the end of discussion thread at Reply #33.[14] No known features are added in HASM's release cycle.

UASM

[edit]

The name was actually used in version 2.33 (dated 2017-05-20) at Terraspace ltd's product page,[15] but it was only announced in version 2.34.[16] Changes to HJWASM includes:[17]

  • Record types: fully supports registers and up to 32bit record fields in 2.41.
  • Support for 128bit: Added in 2.42, inline declaration with the type added in 2.43.1 / .2.
  • Support of typedef chain on return types added in 2.46.8.
  • m512 built-in types added in 2.47.

References

[edit]
  1. ^ Randall Hyde. "WASM: The Open Watcom Assembler". Archived from the original on 2012-03-02. Retrieved 2017-09-11.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  2. ^ Leiterman, James (2005). "MASM vs. NASM vs. TASM vs. WASM". 32/64-bit 80x86 assembly language architecture. Wordware Publishing, Inc. p. 481. ISBN 978-1-59822-002-5. Retrieved 2010-02-01.
  3. ^ Leiterman p482 on Google Books
  4. ^ JWASM, a 32/64 bit assembler based on WASM with syntax similar to MASM. Archived 10 October 2014
  5. ^ Fog, Agner (2009), Optimizing subroutines in assembly language (PDF) (2009-09-26 ed.), p. 13
  6. ^ a b Open Watcom website: Assembler Archived 2006-07-15 at the Wayback Machine
  7. ^ OpenWatcom: "No listing files are generated [by the assembler]. Producing full listings may be a waste of effort because wdis (the Open Watcom disassembler) does a very good job. However, it could be extremely helpful to produce a dump of the internal symbol table the way MASM does, especially for diagnostic purposes."
  8. ^ Open Watcom website: Disassembler Archived 2006-07-15 at the Wayback Machine
  9. ^ The 1996 "WALK32 consists of the following main components:
    • A full-featured PE (Portable Executable) file linker called W32Link.
    • A main include file, containing Win32 constant, type, and structure definitions.
    • Another include file, containing the application and DLL startup source code.
    • Segment and PE section management macros.
    • Macros related to Unicode support.
    • Several demo applications and DLL’s.
    • A collection of programming utilities for various purposes." walk32.doc in walk32_1.zip
  10. ^ GitHub/Baron-von-Riedesel/JWasm
  11. ^ UASM Assembler Development
  12. ^ HJWasm Releases
  13. ^ A New Name? (thread page 1)
  14. ^ A New Name? (thread page 3)
  15. ^ UASM (2.33)
  16. ^ UASM 2.33 Release
  17. ^ UASM ChangeLog
[edit]