Open Watcom Assembler
X86 assembler
From Wikipedia, the free encyclopedia
Open Watcom Assembler (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]
| Open Watcom Assembler | |
|---|---|
| Original author | Open Watcom Assembler |
| Operating system | MS-DOS, Windows, Linux for x86-based PCs, OS/2 for x86-based PCs, FreeBSD for x86-based PCs. |
| Available in | English |
| Type | x86 assembler |
| Website | www |
There are experimental assemblers for PowerPC, Alpha AXP, and MIPS.[6]
Technical details
Assembler
Disassembler
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
JWasm
JWasm is a fork of Wasm originated by Japheth with following features:
- Native support for output formats Intel OMF (16/32-bit), MS COFF (32-bit and 64-bit), ELF (32-bit and 64-bit), Bin and DOS MZ.
- Precompiled JWasm binaries are available for DOS, Windows and Linux. For OS/2 and FreeBSD, makefiles are supplied.
- Supports Intel x86 (8086, 80186, 80286, 80386, 80486, Pentium, Pentium Pro), x86-64 instruction sets with SIMD (MMX, 3DNow!, SSE, SSE2, SSE3 and SSSE3, SSE4.1/2 (since Jwasm), AVX (since JWasm 2.06), VMX (Intel VT-x; AMD SVM, the latter though already implemented, currently still inactive) extensions (since JWasm 2.09)).
- JWasm is written in C. The source is portable and has successfully been tested with Open Watcom, MS VC, GCC and more.
- On Windows, JWasm can be used with both Win32Inc and Masm32. Since v2.01, it will also work with Sven B. Schreiber's SBS WALK32 Win32 Assembly Language Kit[9]
- C header files can be converted to include files for JWasm with Japheth's own dedicated h2incX.
- JWasm's source code is released under the Sybase Open Watcom Public License, which allows free commercial and non-commercial use.
- Fully supports Microsoft macro assembler 6 syntax, all MASM 8 instructions sets.
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
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:
- Instructions:
- SIMD:
- MMX: MOVQ 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.
- Registers: RIP, ZMM registers added in 2.13.
- OO language extension added in 2.25.
HASM
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
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]
- Instruction sets: RDPID added in 2.38.
- AVX-512: VAESDEC added in 2.38
- Data transfer: MOVBE added in 2.47. MOVABS added in 2.48.
- Intel ADX: ADCX, ADOX added in 2.38
- Intel MPX: Support of BND prefix added in 2.34. BND prefix removed from JCXZ instruction group in 2.40.
- CLMUL instruction set: Added in 2.46.8, including pseudo-op forms of CLMUL.
- Hashing: SHA instruction set added in 2.46.8.
- Supervisor Mode Access Prevention: CLAC added in 2.38.
- Persistent Memory Extensions: CLFLUSHOPT added in 2.38.
- Addressing modes: 64-bit absolute immediate (2.37)
- Identified types
- Record types: fully supports registers and up to 32bit record fields in 2.41.
- Support for 128-bit SIMD: 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.
- Console color coding: Added for Windows, OSX and Linux in 2.43.1 / .2.
- Function calling: C-style function calling added in 2.46.