/Assembly-Guide

Assembly Guide

Primary LanguageAssembly


Assembly Guide

A guide covering Assembly programming language including the computer architectures, applications and tools that will make you a better and more efficient developer.

Note: You can easily convert this markdown file to a PDF in VSCode using this handy extension Markdown PDF.


Assembly Learning Resources

Assembly is a low-level programming language. It uses mnemonic codes and labels to represent machine-level code with each instruction corresponding to just one machine operation.

RISC-V Foundation is a non-profit corporation controlled by its 500 members(NVIDIA, Google, Samsung, Raspberry Pi, SiFive, Canonical, and Western Digital) to drive forward the adoption and implementation of the free and open RISC-V instruction set architecture (ISA).

Intel® 64 and IA-32 Architectures Software Developer’s Manual

Introduction to x64 Assembly from Intel

x86 Assembly Language Reference Manual for Open Solaris

AMD64 Architecture Programmer’s Manual Volume 1-5

AMD GPU ISA documentation

AMD Developer Guides, Manuals, and ISA Documents

Assembler language from IBM

The Assembler language on z/OS from IBM

MIPS Architecture & Technology from Wave Computing

Assemblies in .NET

Microsoft Macro Assembler reference

Compiler Intrinsics and Assembly Language from Microsoft

x86 and amd64 instruction Reference

Intro to x86 Assembly Language Programming

Learn Assembly Programming courses on Udemy

Assembly Languages and Assemblers courses on Coursera

Intro to Assembly Language from MIT

Assembly Tools & Architectures

Arm Instruction Emulator (ArmIE) is a tool that emulates Scalable Vector Extension (SVE) and SVE2 instructions on AArch64/ARM64 platforms.

FASM (flat assembler) is an assembler for x86 processors that supports Intel-based assembly language on the IA-32 and x86-64 computer architectures.

Microsoft Assembler (MASM) for x64 is Microsoft's assembler that accepts x64 assembler language.

MASM/TASM is a VSCode extension that offers a way to run and debug DOS(80x86) assembly TASM/MASM through DOSBox and msdos-player.

NASM is an asssembler/disassembler for the x86 CPU architecture portable to nearly every modern platform, and with code generation for many platforms old and new.

GAS is the assembler used by the GNU Project for the default back-end of GCC. It is used to assemble the GNU operating system and the Linux kernel.

MIPS is a reduced instruction set computer (RISC) instruction set architecture (ISA) developed by MIPS Technologies, Inc.. In June 2018 MIPS was Acquired by AI Startup Wave Computing.

LLVM is a library that has collection of modular/reusable compiler and toolchain components (assemblers, compilers, debuggers, etc.). With these components LLVM can be used as a compiler framework, providing a front-end(parser and lexer) and a back-end (code that converts LLVM's representation to actual machine code).

TinyGo is a Go compiler(based on LLVM) intended for use in small places such as microcontrollers, WebAssembly (Wasm), and command-line tools.

Tock is an embedded operating system designed for running multiple concurrent, mutually distrustful applications on Cortex-M and RISC-V based embedded platforms. Tock's design centers around protection, both from potentially malicious applications and from device drivers.

PlatformIO is a professional collaborative platform for embedded development with no vendor lock-in. It provides support for multiplatforms and frameworks such as IoT, Arduino, CMSIS, ESP-IDF, FreeRTOS, libOpenCM3, mbed OS, Pulp OS, SPL, STM32Cube, Zephyr RTOS, ARM, AVR, Espressif (ESP8266/ESP32), FPGA, MCS-51 (8051), MSP430, Nordic (nRF51/nRF52), NXP i.MX RT, PIC32, RISC-V.

PlatformIO for VSCode is a plugin that provides support for the PlatformIO IDE on VSCode.

Keystone is a lightweight multi-platform, multi-architecture(Arm, Arm64, Hexagon, Mips, PowerPC, Sparc, SystemZ & X86) assembler framework.

Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework(ARM, AArch64, M68K, Mips, Sparc, X86) based on QEMU.

Contribute

  • If would you like to contribute to this guide simply make a Pull Request.

License

Distributed under the Creative Commons Attribution 4.0 International (CC BY 4.0) Public License.