HN Debrief

The Art of 64-bit Assembly

  • Programming
  • Developer Tools
  • AI
  • Windows
  • Performance

The post is for the second edition of The Art of 64-Bit Assembly, a very large book from No Starch that teaches x86-64 assembly through Windows and MASM. The sales copy leans hard on an anti-LLM pitch about understanding vtables, ABI details, and instruction-level behavior. That framing hijacked a lot of attention, but the more useful read is simpler: this is a platform-specific deep dive from an author with a long track record of teaching low-level programming, and people familiar with his older books mostly still trust him for that job.

If you need to learn assembly for serious systems work, ABI debugging, JITs, runtimes, or hand-tuned hot paths, this looks like a credible resource despite its narrow Windows and MASM focus. If your target is Linux, ARM, or portable low-level work, expect to pair it with other tools and references rather than treating it as the one assembly book to buy.

Discussion mood

Mostly positive about the book’s existence and about learning assembly in general, but annoyed by the publisher copy and by the way the conversation drifted into AI and syntax wars. Readers who knew Hyde’s older work were broadly respectful, while many others stressed that the Windows plus MASM focus makes this a narrower buy than the title suggests.

Key insights

  1. 01

    Hyde is valued as a low-level teacher

    Hyde’s reputation came through less as “assembly wizard” and more as someone who can teach machine-level thinking to people who missed that layer in bootcamps or self-directed paths. The endorsement of Write Great Code volumes one and two is useful because it frames this new book as part of a broader body of practical systems teaching, even from readers who find some of his compiler skepticism overcooked.

    If you are evaluating this book without having sampled it, Hyde’s earlier teaching books are a good proxy for style and level. This looks best suited for developers who need to build intuition about how code maps onto the machine, not just memorize opcodes.

      Attribution:
    • lexicality #1
    • abeyer #1
  2. 02

    MASM still has macro power others lack

    MASM’s appeal here is not just Intel syntax or Windows integration. It has a much richer macro system than GNU Assembler, including stronger text processing and more flexible expression handling, which matters if you are writing substantial assembly rather than a few inline fragments. That makes the book’s MASM choice more defensible than the usual assembler flamewar suggests.

    If your assembly work includes metaprogramming, code generation, or reusable macro layers, compare assembler macro facilities before dismissing MASM as just a legacy Windows tool. The assembler can shape how maintainable a large codebase feels.

      Attribution:
    • MaskRay #1
  3. 03

    The vtable example is really about ABI boundaries

    The book’s vtable marketing example only makes sense once you separate OS ABI from compiler ABI. Windows kernel and Win32 interfaces are mostly C-facing, while COM and C++ interop ride on defined object layout conventions such as the MSVC ABI. That distinction sharpens the book’s value proposition. It is not teaching “what a vtable is” in the abstract. It is teaching the exact contracts you need when binaries, compilers, and object layouts meet.

    If you work near FFI layers, plugin systems, COM, or binary tooling, focus on ABI and object layout sections rather than treating assembly as only instruction syntax. Those contracts are where hard-to-debug breakage usually lives.

      Attribution:
    • jcranmer #1
    • masfuerte #1
    • wasmperson #1
    • invokestatic #1
  4. 04

    LLMs help more with translation than optimization

    The credible success case for LLMs was assembler migration and tooling assistance, not trusted code generation. One commenter used Claude to port thousands of lines between assembler syntaxes and toolchains with iterative rule setting. Others said models still degrade simple loops, but can be strong as a reference layer or as a driver for tools like radare2, rizin, and Ghidra. That is a much narrower and more believable role than “write correct assembly for me.”

    Use LLMs to accelerate rote assembly work like syntax conversion, documentation lookup, and reverse-engineering workflows. Keep humans in charge of correctness, calling conventions, and performance claims.

      Attribution:
    • ndesaulniers #1
    • sousousou #1
    • rescbr #1
  5. 05

    Assembly persists in runtimes and hardware edges

    The practical use cases named here were not nostalgia projects. They were compiler runtimes, static language runtimes without libc, garbage collectors, coroutines, JIT support code, special instructions, and small hard real-time microcontrollers. That grounds the whole conversation. Assembly survives where software has to cross directly into CPU or OS mechanics, not because engineers are ignoring better abstractions.

    If your roadmap includes a JIT, custom runtime, embedded hard real-time target, or unusual calling and memory behavior, assume some assembly will leak into the design. Budget for that expertise early instead of discovering it at integration time.

      Attribution:
    • stevekemp #1
    • sureglymop #1
    • WalterBright #1
    • sitzkrieg #1

Against the grain

  1. 01

    Assembler choice is mostly taste outside niches

    The strongest pushback to the MASM focus was that many developers are happier with NASM, YASM, FASM, or GAS, and outside platform-specific macro features the differences often come down to familiarity and portability. That weakens any implication that MASM is the natural environment for learning assembly in 2026, especially for people on ARM Macs or Linux-first toolchains.

    Pick the assembler that matches your target environment and existing toolchain, then treat syntax as a local detail. Do not let a book’s assembler choice dictate your whole low-level stack if your deployment target points elsewhere.

      Attribution:
    • csense #1
    • ndesaulniers #1
    • anta40 #1
    • sureglymop #1
    • sitzkrieg #1
  2. 02

    Writing a compiler can beat writing assembly

    For substantial low-level projects, hand-written assembly may be the wrong abstraction entirely. A simple custom compiler or high-level assembler can automate register saving, calling convention handling, and portability while still producing the kind of machine-near code that motivated assembly in the first place. That flips the usual beginner instinct on its head. The lower startup cost of raw assembly can create a much worse maintenance burden later.

    If you expect more than a few isolated routines, consider investing in a tiny compiler, code generator, or macro layer instead of scaling up direct assembly. The upfront tooling cost can save you from unreadable and fragile code a month later.

      Attribution:
    • norir #1

In plain english

ABI
Application Binary Interface, the low-level contract that defines how compiled code interacts at the binary level, including calling conventions, data layout, and object formats.
COM
Component Object Model, a Microsoft binary interface standard for reusable software components that can interoperate across languages.
FASM
Flat Assembler, an assembler known for its macro capabilities and popularity among some Windows and low-level developers.
GAS
GNU Assembler, the assembler used by GNU toolchains and common in Linux system programming.
Ghidra
A software reverse-engineering suite developed by the United States National Security Agency for analyzing compiled binaries.
GNU Assembler
The standard assembler used in the GNU toolchain, often referred to as GAS.
JIT
Just-in-time compilation, generating or compiling machine code at runtime instead of ahead of time.
libc
The standard C library that provides basic runtime and operating system interface functions to C programs.
LLM
Large language model, a type of AI system trained on large amounts of text to generate and edit language.
MASM
Microsoft Macro Assembler, Microsoft’s assembler for x86 and x86-64, commonly used on Windows.
MSVC ABI
The binary interface conventions used by Microsoft Visual C++ for things like function calls, object layout, and exception handling on Windows.
NASM
Netwide Assembler, a portable x86 assembler that uses Intel-style syntax and is common on multiple platforms.
radare2
An open source reverse-engineering framework used for disassembly, debugging, and binary analysis.
rizin
A reverse-engineering framework forked from radare2, used for binary analysis and disassembly.
SIMD
Single Instruction, Multiple Data, a style of CPU instruction that performs the same operation on multiple data elements at once.
vtable
Virtual method table, a compiler-generated table of function pointers used to implement dynamic dispatch in object-oriented languages like C++.
x86-64
The 64-bit version of the x86 processor architecture used in most Intel and AMD desktop and server CPUs.
YASM
Yet Another Assembler, an x86 assembler similar to NASM with a focus on portability and modularity.

Reference links

Related books

  • The Art of ARM Assembly
    Mentioned as Hyde’s ARM-focused counterpart for readers on ARM-based systems such as Apple Silicon Macs.

Talks and media