We may earn an affiliate commission when you visit our partners.
Daniel McCarthy

This course is intended to teach you x86 assembly programming. This course teaches you how processors work and how machine code is possible. We start the course using an emulator for the legacy Intel 8086 processor where we learn all about registers and the memory segmentation model.

Since we start the course with an emulator it allows me to pause the machine at any moment in time and show you exactly what is going on.

Read more

This course is intended to teach you x86 assembly programming. This course teaches you how processors work and how machine code is possible. We start the course using an emulator for the legacy Intel 8086 processor where we learn all about registers and the memory segmentation model.

Since we start the course with an emulator it allows me to pause the machine at any moment in time and show you exactly what is going on.

After you learn all about the legacy 8086 processor and how to program assembly for it we then move to the modern processors of today and start writing assembly for those. You are taught how to write 32 bit programs for Windows machine's and most importantly how to communicate with C programs using assembly language. You are shown how to access variables, structures and arrays through just assembly code. We also call C functions and they call our assembly routines.

This course recommends that you have some prior experience in the C programming language or at the very least some programming experience in another language. The reason for this is because part two of the course when I teach modern assembly I reference the C programming language quite a lot since we write assembly that can talk with C.

Royalty Free Music from Bensound

Enroll now

What's inside

Learning objectives

  • How to use emu8086 to create assembly programs for the 8086 processor
  • All about registers in a processor and how they can be useful for storing temporary information
  • All about segmentation in intel processors
  • All about interrupts
  • Subroutines and return addresses
  • The stack
  • Talking with a c program using assembly
  • Talking with an assembly program using c
  • Understanding disassembly
  • Understanding how gcc compiler can create machine code that can call our assembly functions
  • How to use nasm assembler
  • Show more
  • Show less

Syllabus

Introduction
We start development on an emulator of an old Intel processor. The 8086 processor that is. Starting legacy helps me build you up so you will understand todays processors when we get to that section
Read more
What Is Assembly Language?
Installing The Emulator
Hello World
Transistors And Logic Gates Understanding The Processor
Registers In The 8086
Segmentation
The Stack, Subroutines And Endianness Explained
Moving Data To And From Memory
Interrupts And How They Work
Talking With Hardware With In And Out Instructions
Mathematics Adding, Substraction, Division And Multiplication
Condition Instructions
Reading bytes with the lodsb instruction
Storing bytes with the stosb instruction
Revising Our Hello World Program
Helpful Resources For The 8086 Processor

You are tested here on everything you learned in the "Legacy 8086 Processor Development" section

In this section we will develop software for Windows for more modern processors. You will be able to run the programs we make on your Windows machine
Installing x86 Assembler Dependencies
x86 Hello World
Using Assembly With C
Local Variables In Assembly
Returning Structures In Assembly
Pointers In Assembly
Passing Structures To Assembly
Receive Input From The Keyboard
Conclusion
Bonus Lecture

Save this course

Save x86 Assembly Language Programming Masters Course to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in x86 Assembly Language Programming Masters Course with these activities:
Review C Programming Fundamentals
Solidify your understanding of C programming concepts, especially pointers and structures, as the course heavily relies on C for interacting with assembly code.
Browse courses on C Programming
Show steps
  • Review basic C syntax and data types.
  • Practice writing functions and using pointers.
  • Study how structures are defined and used in C.
Read 'Programming From The Ground Up'
Gain a deeper understanding of assembly language fundamentals by reading this book, which covers essential concepts and provides practical examples.
Show steps
  • Read the chapters on assembly language basics.
  • Study the examples provided in the book.
  • Try to implement some of the examples yourself.
Practice Assembly Language Exercises
Reinforce your understanding of assembly language instructions and concepts through repetitive exercises, focusing on data manipulation and control flow.
Show steps
  • Write assembly code to perform basic arithmetic operations.
  • Implement conditional statements and loops in assembly.
  • Practice moving data between registers and memory.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Create Assembly Language Cheat Sheet
Compile a cheat sheet of common x86 assembly instructions and their usage to serve as a quick reference during the course.
Show steps
  • List common x86 assembly instructions.
  • Provide a brief description of each instruction.
  • Include examples of how to use each instruction.
Simple Calculator in Assembly
Develop a simple calculator program in assembly language that performs basic arithmetic operations, integrating your knowledge of registers, memory, and instructions.
Show steps
  • Design the calculator's user interface.
  • Implement the arithmetic operations in assembly.
  • Test the calculator thoroughly.
Read 'Intel® 64 and IA-32 Architectures Software Developer’s Manual'
Deepen your understanding of x86 architecture by consulting the official Intel manual, which provides comprehensive details on instructions and memory management.
Show steps
  • Familiarize yourself with the manual's organization.
  • Study the sections relevant to the course topics.
  • Use the manual to look up specific instructions and their behavior.
Contribute to an Assembly Project
Contribute to an open-source project that uses assembly language, gaining practical experience and collaborating with other developers.
Show steps
  • Find an open-source project that uses assembly language.
  • Identify a bug or feature to work on.
  • Submit your changes to the project.

Career center

Learners who complete x86 Assembly Language Programming Masters Course will develop knowledge and skills that may be useful to these careers:
Reverse Engineer
A reverse engineer analyzes software or hardware to understand its design, functionality, and components, often without access to original source code or documentation. This course helps you understand the fundamental principles of how processors work and how machine code is created. Knowledge of assembly programming, such as x86, is essential in reverse engineering for analyzing compiled code and identifying vulnerabilities. By learning how to read and understand assembly language, especially in the context of modern processors and interaction with C, you gain the skills to dissect and analyze software at a low level. This is crucial for identifying bugs, security flaws, or understanding proprietary algorithms. The course's focus on disassembly is particularly valuable, as it teaches you to deconstruct compiled code. This role often requires a bachelor's degree, and may require a master's degree.
Exploit Developer
An exploit developer identifies and develops techniques to take advantage of security vulnerabilities in software or hardware systems. As an exploit developer you will find that this course helps you develop expertise in assembly language programming, which is essential for understanding how software works at a low level and for crafting effective exploits. The course's coverage of x86 assembly programming, including topics like memory segmentation, interrupts, and interaction with C code, provides a strong foundation for analyzing and exploiting vulnerabilities. The course's teachings on disassembly are helpful.
Security Researcher
A security researcher investigates software, hardware, and networks to identify vulnerabilities and develop security solutions. As a security researcher, you will find that this course may provide foundational knowledge to understanding low-level system operations and how software interacts with hardware. Understanding x86 assembly programming helps in analyzing malware, reverse engineering software, and identifying potential security exploits. The course's focus on modern processors, interaction with C, and disassembly techniques provides skills applicable to identifying and mitigating security risks within systems. The course's lessons on how to read assembly output from compilers such as GCC are particularly useful. This role often requires a bachelor's degree, and may require a master's degree.
Malware Analyst
A malware analyst examines and dissects malicious software to understand its functionality, behavior, and potential impact. To be a malware analyst, you must possess skills in assembly language programming to reverse engineer malware code and uncover its hidden operations. This course may provide you with expertise in x86 assembly programming, which is widely used in malware analysis for disassembling and analyzing malicious code. The course's coverage of topics like registers, memory management, and assembly interaction with C code helps you understand the inner workings of malware and develop effective detection and removal techniques. The disassembly lessons are particularly insightful.
Firmware Engineer
Firmware engineers develop low-level software that controls hardware devices. As a firmware engineer, you may find that this course helps build a solid foundation in assembly language programming, which is often used in firmware development for direct hardware interaction. This is particularly relevant when working with embedded systems or legacy hardware. This course's lessons on x86 assembly programming helps in writing drivers, bootloaders, and other low-level system software. Understanding registers, memory management, and interrupts, as covered in the course, are crucial skills for firmware development. This role typically requires a bachelor's degree.
Operating Systems Developer
An operating systems developer designs and implements the core software that manages computer hardware and resources. This course helps build a foundation in understanding how processors work at a low level. x86 assembly programming is relevant for building operating system kernels, device drivers, and other low-level components. The skills to manage memory, handle interrupts, and interact with hardware are fundamental to OS development. The course's coverage of segmentation, interrupts, and interaction with hardware provides useful knowledge for those interested in operating system development. The course's grounding in older processors and moving to newer architectures gives you an appreciation for the evolution of operating systems. This role typically requires an advanced degree.
Compiler Developer
A compiler developer designs and builds the software that translates high-level programming languages into machine code. As a compiler developer, you need a thorough understanding of assembly language and processor architecture to create efficient and optimized code. This course provides insights into how high-level languages like C are translated into assembly instructions, and how compilers can be optimized. The course's exploration of the x86 instruction set, memory management, and interaction between assembly and C code helps in building a strong foundation for compiler design. The course's lessons on understanding disassembly and how compilers create machine code are directly applicable. This role typically requires an advanced degree.
Embedded Systems Engineer
An embedded systems engineer develops software for specialized computer systems embedded in devices and machines. Programming in assembly language may be required on resource-constrained platforms where direct hardware control is crucial. This course gives you an understanding of processor architecture, memory management, and direct hardware interaction. The x86 assembly knowledge gained can be applied to developing firmware, device drivers, and other low-level software components for embedded systems. The course's lessons on registers, interrupts, I/O instructions and its coverage of legacy systems may be useful in embedded development. This role typically requires a bachelor's degree.
Game Developer
A game developer designs and creates video games for various platforms. While modern game development relies heavily on high-level languages and game engines, understanding assembly can be valuable for optimizing performance-critical sections of code. As an aspiring game developer, you may find that this course helps you gain insights into how processors execute instructions and how to optimize code for speed and efficiency. The x86 assembly skills acquired can be used to fine-tune game engines, write custom shaders, and optimize rendering pipelines. The course's focus on mathematics, memory management, and optimization techniques is valuable in game development. This role typically requires a bachelor's degree.
Cybersecurity Analyst
A cybersecurity analyst monitors and protects computer systems and networks from cyber threats. While not always a primary requirement, understanding assembly language can be valuable for cybersecurity analysts when dealing with low-level security issues or analyzing malware. As a cybersecurity analyst, you may find that this course gives you insights into how software interacts with hardware and how vulnerabilities can be exploited at the assembly level. The course's coverage of x86 assembly programming helps in reverse engineering malware, identifying potential security exploits, and understanding the behavior of malicious code. This role typically requires a bachelor's degree.
Software Engineer
A software engineer designs, develops, and maintains software applications. While most software development relies on high-level languages, understanding assembly can be useful for debugging, performance optimization, and low-level system programming. Software engineers may find that this course may broaden their understanding of how software interacts with hardware and how code is executed at a low level. The x86 assembly skills may be occasionally used to analyze compiled code, optimize performance bottlenecks, or interface with legacy systems. The course's coverage of assembly interaction with C, memory management, and debugging techniques helps in becoming a well-rounded software engineer. This role typically requires a bachelor's degree.
Technical Support Engineer
A technical support engineer provides technical assistance to customers or internal teams by assisting them with software and hardware issues. While assembly language knowledge is not typically required, you as a technical support engineer may find that assembly experience can be useful for troubleshooting low-level system problems or debugging complex software issues. The x86 assembly programming knowledge that you may gain from this course may help in understanding system architecture, memory management, and assembly interaction with C code. The course's teachings on how processors work, registers, and segmentation helps in diagnosing and resolving technical issues, especially when dealing with legacy systems or embedded devices. This role typically requires a bachelor's degree.
IT Systems Administrator
An IT systems administrator manages and maintains an organization's computer systems and networks. While assembly language programming is not a core skill for systems administrators, you will find that as a systems administrator, understanding assembly concepts can be helpful for troubleshooting low-level system issues or optimizing system performance. This course may provide you with a foundation for understanding processor architecture, memory management, and machine code execution. While not directly applicable in day-to-day tasks, the x86 assembly skills can be useful for diagnosing hardware-related problems or analyzing system-level errors. This role typically requires a bachelor's degree.
Data Scientist
A data scientist analyzes large datasets to extract insights and inform decision-making. As a data scientist, you will find that this course does not directly prepare you for this role. It's rare for a data scientist to need knowledge of assembly language. This role typically requires an advanced degree.
Database Administrator
A database administrator manages and maintains databases to ensure data integrity, security, and availability. This course has little application to this role. As a DBA, you will find that this course does not directly prepare you for this role. It's rare for a DBA to need knowledge of assembly language. This role typically requires a bachelor's degree.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in x86 Assembly Language Programming Masters Course.
This multi-volume set is the definitive reference for x86 assembly language programming. It provides detailed information on the instruction set, memory architecture, and other low-level details of Intel processors. While dense, it's an invaluable resource for advanced assembly programmers. is best used as a reference tool.
Provides a solid foundation in assembly language programming, starting from the very basics. It covers fundamental concepts like memory management, registers, and system calls. It's particularly useful for understanding the low-level details of how programs interact with the operating system. This book great reference for those new to assembly.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser