A powerful, all-in-one Visual Studio Code / VSCodium extension to instantly compile and run x86/x64, ARM64, ARM32, RISC-V, MIPS & FASM Assembly code directly from your editor. Now supporting Linux, Windows, macOS, and FreeBSD with a seamless cross-platform workflow for native and cross-platform Assembly development.
✨ Features
- 🏗️ Massive Core Refactoring & Modularization (New in v1.4.8!): The extension's internal architecture has been completely rewritten! Code is now intelligently modularized into platform-specific engines (Linux, Windows, macOS), drastically improving performance, maintainability, and paving the way for seamlessly integrating even more architectures in the future.
- 🍎 Native macOS ARM64 (Apple Silicon) Support (New in v1.4.7!): The ultimate native experience! You can now compile, link, and run macOS ARM64 Assembly natively directly on your M1/M2/M3 Mac. The extension automatically detects the
darwinenvironment and uses Apple's standardasandldtools for blazing-fast execution without any emulation layers. - 🪐 Linux RISC-V 128-bit (main) Support (New in v1.4.6!): Pushing the limits even further! You can now cross-compile experimental RISC-V 128-bit (RV128) Linux Assembly using the C-style
mainentry point. It seamlessly links with the C Runtime using GCC and runs via QEMU directly from your terminal. - 🪐 Linux RISC-V 128-bit Support (New in v1.4.5!): Pushing the boundaries of architecture! You can now cross-compile and run experimental RISC-V 128-bit (RV128) Linux Assembly using the standard
_startentry point directly from your Linux machine. - 🧹 Clean Snippets Logic (New in v1.4.4!): Speed up your workflow! All built-in templates have been decluttered by removing inline comments. You now get pure, production-ready code instantly upon pressing Tab, keeping your workspace professional and distraction-free.
- 🪐 Linux RISC-V 32-bit Embedded (RV32E) Support (Updated in v1.4.3!): The embedded suite is complete! You can now cross-compile and run RV32E Linux Assembly using both
_startand C-stylemainentry points. It features specialized logic to handle the 16-register constraint andilp32eABI syscall conventions. - 🪐 Linux RISC-V 32-bit (main) Support (New in v1.4.1!): The RISC-V circle is complete! You can now cross-compile and run RISC-V 32-bit (RV32I) Linux Assembly using the C-style
mainentry point. Utilizing a smart linking workaround, it bypasses 32/64-bit libc conflicts flawlessly on Linux! - 🪐 Linux RISC-V 32-bit (RV32I) Support (New in v1.4.0!): Shrink it down! You can now cross-compile and run RISC-V 32-bit (RV32I) Linux Assembly using the standard
_startentry point directly from your Linux machine usingqemu-riscv32-static. - 🪐 Linux RISC-V 64-bit Support (Updated in v1.3.9!): Enter the future of open hardware! You can now cross-compile and run RISC-V 64-bit Linux Assembly using both
_startand the C-stylemainentry point directly from your Linux machine usingqemu-riscv64-static. - ⚓ FreeBSD 32-bit (main) Support (New in v1.3.7!): We went deeper! You can now cross-compile FreeBSD 32-bit Assembly using the C-style
mainentry point. It fully supports FreeBSD's unique stack-based syscall convention right from your Linux terminal. - ⚓ FreeBSD 32-bit (x86) Support (New in v1.3.6!): The BSD collection expands! You can now cross-compile FreeBSD 32-bit Assembly using the standard
_startentry point with Stack-based Syscalls directly from Linux. - 🍎 macOS ARM64 (Apple Silicon) Cross-Compilation (New in v1.3.5!): The ultimate breach! You can now cross-compile macOS ARM64 Assembly using the C-style
_mainentry point andlibSystem. Perfect for building for M1/M2/M3 chips directly from your Arch Linux machine. - 🦾 Windows ARM32 (main) Support (New in v1.3.4!): The ARM circle is now complete! You can now cross-compile Windows ARM32 (AArch32/armv7) Assembly using the C-style
mainentry point, allowing seamless integration with the C Runtime on 32-bit ARM hardware. - 🦾 Windows ARM32 Cross-Compilation (New in v1.3.3!): Breaking more physical boundaries! You can now cross-compile Windows ARM32 (AArch32/armv7) Assembly using
_start. It compiles perfectly on Arch Linux, but reminds you that your x86_64 atoms still can't natively run ARM32 code! - 🦾 Windows ARM64 (main) Support (New in v1.3.2!): The saga continues! You can now cross-compile Windows ARM64 Assembly using the C-style
mainentry point. Perfect for projects integrating with the C Runtime on ARM hardware. - 🪟 Windows ARM64 Cross-Compilation (New!): The ultimate flex! You can now cross-compile Windows ARM64 Assembly directly from your Linux machine. It compiles perfectly, but outputs a fun physics reminder since you can't natively run it on x86_64!
- 🍷 Smart Wine Log Control (New in v1.3.0!): Say goodbye to annoying GPU and Mesa warnings when running Windows apps on Linux! You can now easily toggle Wine logs (ON/OFF) directly from the Tools & Settings menu for a perfectly clean terminal output.
- 🦾 Linux ARM32 (main) Support (New in v1.2.9!): Complete the set! You can now compile and run ARM32 (AArch32) Assembly using the C-style
mainentry point seamlessly, completing the ARM support lineup. - 🦾 Linux ARM64 (main) Support (New in v1.2.8!): Full flexibility! You can now compile and run ARM64 Assembly using the C-style
mainentry point seamlessly, in addition to the standard_start. - 🚀 Universal Assembly Mode Support (New in v1.2.7!): Total freedom! The extension now supports and detects almost every Assembly flavor, including MASM (case-insensitive), FASM, MIPS, UASM, and RISC-V. Even if you manually change the language mode in the status bar or use other ASM extensions, the "Run" and "Info" buttons will stay active and ready to work.
- 🦾 Linux ARM32 Support (New in v1.2.6!): The legacy lives on! You can now write and run ARM32 (AArch32) Assembly directly on your Linux machine. Utilizing
arm-none-eabi-asfor assembling andqemu-arm-staticfor execution, perfect for learning embedded systems and mobile architecture. - 🦾 Linux ARM64 Support (New in v1.2.5!): Expand your horizons! You can now write, compile, and run ARM64 (AArch64) Assembly code directly on your x86_64 Linux machine. Utilizing
aarch64-linux-gnu-asfor assembling andqemu-aarch64-staticfor execution, bringing mobile and server-grade architecture development to your desktop. - ⚓ FreeBSD Cross-Compilation (Enhanced in v1.2.4!): The BSD Gateway is open! You can now compile and run FreeBSD 64-bit Assembly code directly on Linux using both standard
_startand C-stylemainentry points. Utilizingld.lld(LLVM Linker) for linking andqemu-x86_64-staticfor execution, bringing BSD development to your Linux environment seamlessly. - 🍎 macOS Cross-Compilation (Added in v1.2.2): Break the OS boundaries! You can now compile, link, and run macOS Mach-O 64-bit Assembly code directly from Linux. Utilizing
osxcrossfor linking andDarlingfor execution, bringing Apple development to your Linux environment. - 🧰 Unified Tools & Settings Menu (Added in v1.2.1): Declutter your workflow! We've added a dedicated "Info" icon (
i) right next to the Play button. Clicking it opens a sleek, unified interactive menu giving you instant access to all extension settings, dependency checkers, and linker configurations in one convenient place! - 🐧 Linux Linker Override (Added in v1.2.0): Full manual control to switch between
ld(Standard, best for pure ASM) andgcc(Best for C-Library integration) directly from the Command Palette on Linux, maximizing flexibility! - 🗑️ Auto-Cleanup Temporary Files (Added in v1.1.9): Keep your project folders clean! The extension can automatically delete temporary build files (
.obj,.o,.err,.lst) after a successful run. Completely customizable via settings. - 💡 Smart Hover Logs (Added in v1.1.8): Say goodbye to opening separate
.errfiles! Simply hover your mouse over the red error squiggles in your code, and an elegant pop-up will instantly display the complete compiler error log. - 📜 Transparent Build Logging & Error Prevention (Added in v1.1.7): See exactly what's happening under the hood! The extension logs every build command directly to the terminal for full transparency.
- 🔍 Inline Error Diagnostics (Added in v1.1.5): A built-in intelligent linter that runs the assembler in the background, highlighting the exact word with a red squiggle and a custom gutter icon. Now supporting NASM, UASM, and GAS (for ARM and RISC-V).
- 🤖 Smart Auto-Detect: Automatically analyzes your code keywords (like
svc #0,ecall,riscv64,rv32i,rv32e,rv128,freebsd,macho64,irvine32,win-arm64) to instantly recommend the perfect build mode. - 🎛️ Manual Win32/Linux Linker Override: Full manual control to switch between
ldandgcclinkers to ensure maximum stability. - 🖥️ Sequential Terminal Execution: Commands are sent sequentially to the terminal for a cleaner output and easier debugging.
- 📦 Smart Dependency Checker (Enhanced): Automatically verifies if required tools (nasm, gcc, uasm, wine, darling, lld, qemu, cross-compilers) are installed. If any tool is missing, it automatically opens the Installation Guide.
- ⚡ One-Click Execution: Integrated directly into the editor's Run button menu.
- 🧠 Dynamic Irvine Path: Persistent path saver for the
Irvine32.inclibrary. - 📁 Broad Compatibility: Automatically detects a wide range of assembly extensions (
.asm,.s,.S,.inc,.nasm,.masm,.uasm,.fasm,.mips).
🎛️ Extension Commands
You can access these features at any time via the new Tools & Settings button (ℹ️) next to the Play button, or via the Command Palette (Ctrl + Shift + P):
ahmed-x86 ASM: Settings & Tools: Opens the unified interactive menu to manage all extension features.Toggle Wine Log Visibility: Show or hide Wine terminal warnings directly from the settings menu.Check ASM Dependencies (ahmed_x86): Scans your system to verify tools likenasm,gcc,wine,darling,lld,aarch64-linux-gnu-as,arm-none-eabi-as, andriscv64-linux-gnu-as.Reset Irvine Library Path: Clears your saved Irvine directory path.Change Linux/Win32 Linker Method: Manually switch betweenldandgcc.
📝 Snippets & Templates
Stop writing boilerplate from scratch! Type any of the following prefixes in an empty .asm or .s file and press Tab or Enter to generate a complete template:
🪐 RISC-V Templates
| Prefix | Description |
|---|---|
linux-riscv128-start |
Linux RISC-V 128-bit (RV128) boilerplate using GNU Assembler (GAS) |
linux-riscv128-main |
Linux RISC-V 128-bit (RV128) boilerplate using main |
linux-riscv64-start |
Linux RISC-V 64-bit boilerplate using GNU Assembler (GAS) |
linux-riscv64-main |
Linux RISC-V 64-bit boilerplate using main entry point |
linux-riscv32-start |
Linux RISC-V 32-bit (RV32I) boilerplate using GNU Assembler (GAS) |
linux-riscv32-main |
Linux RISC-V 32-bit (RV32I) boilerplate using main (No C-Lib) |
linux-riscv32e-start |
Linux RISC-V 32-bit Embedded (RV32E) boilerplate using _start |
linux-riscv32e-main |
Linux RISC-V 32-bit Embedded (RV32E) boilerplate using main (No C-Lib) |
🦾 ARM Templates
| Prefix | Description |
|---|---|
linux-arm32-main |
Linux ARM32 (AArch32) boilerplate using main |
linux-arm64-main |
Linux ARM64 (AArch64) boilerplate using main |
linux-arm32-start |
Linux ARM32 (AArch32) boilerplate using GNU Assembler (GAS) |
linux-arm64-start |
Linux ARM64 (AArch64) boilerplate using GNU Assembler (GAS) |
win-arm64-start |
Windows ARM64 boilerplate using _start (Cross-compile only) |
win-arm64-main |
Windows ARM64 boilerplate using C-style main (Cross-compile only) |
win-arm32-start |
Windows ARM32 boilerplate using _start (Cross-compile only) |
win-arm32-main |
Windows ARM32 boilerplate using C-style main (Cross-compile only) |
FreeBSD Templates
| Prefix | Description |
|---|---|
freebsd64-start |
FreeBSD 64-bit boilerplate using Raw Syscalls and _start |
freebsd64-main |
FreeBSD 64-bit boilerplate using main |
freebsd32-start |
FreeBSD 32-bit boilerplate using Stack Syscalls and _start |
freebsd32-main |
FreeBSD 32-bit boilerplate using Stack Syscalls and main |
🍎 macOS (Mach-O) Templates
| Prefix | Description |
|---|---|
mac64-main |
macOS 64-bit boilerplate using Apple official _main and libSystem |
mac-arm64-main |
macOS ARM64 (Apple Silicon) boilerplate using _main |
🐧 Linux Native Templates
| Prefix | Description |
|---|---|
linux32-main |
Linux 32-bit boilerplate using main |
linux32-start |
Linux 32-bit boilerplate using _start |
linux64-main |
Linux 64-bit boilerplate using main |
linux64-start / arch-start |
Linux 64-bit boilerplate using _start (Prints "i use Archlinux BTW") |
🪟 Windows API / Standalone Templates
| Prefix | Description |
|---|---|
win32-std-main |
Win32 pure Windows API using main |
win32-std-start |
Win32 pure Windows API using _start |
win64-std-main |
Win64 pure Windows API using main |
win64-std-start |
Win64 pure Windows API using _start |
win64-std-main-irvine |
Win64 pure Windows API using main by irvin library |
win64-std-start-irvine |
Win64 pure Windows API using _start |
🛠️ Requirements
🐧 For Linux Users:
Ensure your system has the following dependencies installed:
nasm,uasm,binutils(ld),mingw-w64-gcc,wine.- For macOS Cross-compilation:
osxcross(linker) anddarling(runner). - For FreeBSD support:
lld(linker) andqemu-user-static(runner). - For Linux ARM64 support:
aarch64-linux-gnu-binutilsandqemu-aarch64-static. - For Linux ARM32 support:
arm-none-eabi-binutilsandqemu-arm-static. - For Linux RISC-V support:
riscv64-linux-gnu-binutils,riscv64-linux-gnu-gcc,qemu-riscv64-static, andqemu-riscv32-static. (Note: The 64-bit RISC-V tools natively support assembling and linking for 32-bit and 128-bit experimental environments via specific flags). - For Windows ARM (64/32) support:
llvm-mingw-w64-toolchain-ucrt-bin(AUR).
🪟 For Windows Users:
Ensure your system has an MSYS2 environment set up with:
mingw-w64toolchains andnasm.exein your PATH.
🍎 For macOS Users:
To natively compile and run ARM64 assembly on your Apple Silicon Mac, simply ensure you have the Xcode Command Line Tools installed (which provides clang, as, and ld):
- Open your terminal and run:
xcode-select --install
🎯 How to Use
- Open any Assembly file in VSCodium / VS Code.
- Type a snippet prefix (e.g.,
linux-riscv128-mainorlinux-arm32-main) and pressTab. - Click the drop-down arrow next to the Play (Run) button.
- Select Run Assembly (ahmed_x86).
- Watch your code compile and run seamlessly!
🤝 Contributing & Feedback
Feel free to open an issue or a pull request on the GitHub Repository.
⭐ Notice: If you find this extension useful, please consider leaving a 5-star rating on the VS Code Marketplace!
👨💻 Author
Created with 💻 & ☕ by ahmed-x86
repo ahmed-x86 asm documentation ahmed-x86 asm