This page was last modified 00:49, 27 October 2021 by Treblig.

vasm is a portable and retargetable assembler to create linkable objects in various formats or absolute code. Multiple CPU-, syntax and output-modules can be selected.

Many common directives/pseudo-opcodes are supported (depending on the syntax module) as well as CPU-specific extensions.

The assembler supports optimizations (e.g. choosing the shortest possible branch instruction or addressing mode) and relaxations (e.g. converting a branch to an absolute jump when necessary).

Most syntax modules support macros, include directives, repetitions, conditional assembly and local symbols.

Currently the following CPUs are officially supported by vasm (loosely ordered by maturity):

  • M680x0 family (including M6888x, M68851 and CPU32)
  • ColdFire family (all models of V2, V3, V4, V4e)
  • PowerPC family (POWER, 40x, 440, 460, 6xx, 7xx, 7xxx, 860, Book-E, e300 and e500)
  • Z80 family (Z80, 8080, 8085, GBZ80, 64180, RCM2/3/4k)
  • 6502 family (including 65C02, 65CE02, DTV, 45GS02, HU6280)
  • 6809 family (6809, 6309 and 68HC12)
  • Jaguar RISC (GPU and DSP instruction sets)
  • ARM (architecture ARMv1 to ARMv4, including THUMB mode)
  • 80x86 family (IA32 8/16/32 bit, using MIT-syntax)
  • C16x/ST10
  • 6800 family (6800, 6801, 6803, 68HC11)
  • PDP-11 architecture (includes EIS, FIS)
  • QNICE (elegant 16-bit FPGA CPU)
  • TR3200 (virtual CPU from 0x10c)
  • Raspberry-Pi VideoCore IV

These syntax flavours are supported:

  • Standard MIT (GNU-as style) syntax
  • Motorola/Freescale 68k syntax (Devpac compatible)
  • Atari MadMac syntax (6502, 68k, Jaguar)
  • Old 8-bit style syntax