Assembly Language

Assembly language is a low-level programming language that is essentially a human-readable version of machine code.

Practically speaking, it is the lowest-level language that makes any sense for a human to learn.

Assembly Language Course

As the course on Assembly language is developed, we will place links to each article below.

Introduction to Assembly Language – What is assembly and where is it used? This lesson introduces fundamental topics related to assembly, including instructions, mnemonic codes, memory, the stack, the heap, and registers.

Assemblers – An assembler is software that translates assembly code into machine code. This article covers how the assembler actually works, and compares assemblers to compilers.

Binary for Assembly – An introduction to the binary number system and how it relates to Assembly language.

Hexadecimal for Assembly – An introduction to hexadecimal and how it is used in Assembly language. This lesson also includes the first example of an Assembly instruction!

Assembly Language Registers – A detailed look at registers in x86-64 Assembly. This article contains a high-level overview of the most common registers, and also takes a look at the evolution of registers as processors developed, culminating in x64.

Understanding the Stack in Assembly – A deep-dive into the stack and how it relates to x86-64 assembly.

Assembly Instructions – An overview of the most common instructions used in x86-64 assembly.
NOP: The simplest instruction. It doesn’t do anything.
MOV: The mov (move) instruction allows data to be moved from one location to another.
PUSH and POP: Used to place items onto, or remove items from, the stack.

Functions in Assembly – Functions work a bit differently in assembly languages than in high-level languages, and understanding how they work is critical.

Most of the time, programmers don’t write directly in assembly. Instead, Assembly commonly serves as an intermediary language between machine code (the binary code that a computer’s central processing unit, or CPU, understands) and high-level programming languages (such as Java, Python, or Rust) that are easier for humans to read and write.

However, there are lots of great reasons to learn assembly, including:

  • Assembly teaches us how computers actually work at a deep level.
  • Learning assembly can provide considerable insight into high-level programming languages.
  • Any program can be disassembled; ‘everything is open source if you can read assembly!
  • Programs can be optimized for speed in ways that are virtually impossible using higher-level languages or automated tooling.
  • Some fields require knowledge of assembly, including: reverse engineering, malware analysis, and embedded programming. Ethical hacking and system security skills are also greatly enhanced by knowledge of assembly.
  • Since skill with assembly is relatively rare these days, it can help you stand out from others in your field.

Learn Assembly Language

Learning assembly can be daunting. Every computer architecture or microprocessor has its own version, so an aspiring student may wonder where to start.

That’s why we’re putting together this comprehensive, platform-agnostic course on Assembly. While most of the examples will be focused on 64-bit (x64) development for Windows, we will also cover x86 as well and we’ll see where Linux and OS X development diverge from Windows.

Articles on Assembly Language

Assemblers – An in-depth guide on assemblers, different types of assemblers, and how they work.

Supplementary Resources for Learning Assembly Language

While this course strives to be as comprehensive as possible in this course, it is invaluable to learn from other sources as well – this can help you to retain information as well as being exposed to the topic from a different perspective.

There are also other websites that have put together amazing resources that can be helpful for things like learning binary to hexadecimal conversions.

x86 and amd64 instruction reference – From Felix Cloutier. An awesome, comprehensive reference for x86 instructions.

flippybitandtheattackofthehexadecimalsfrombase16 – This is a great game for learning how to convert between binary and hexadecimal. Games are the best way to learn!