We may earn an affiliate commission when you visit our partners.
Muhanad Al-warawreh

This course focuses on programming microprocessors that compatible with Intel and AMD processors with 32 bit and 64 bit of Microsoft Windows.

In this course we will use MASM (Microsoft Macro Assembler) which is included in Microsoft Visual Studio using Irvine.

In this course you will learn basic principles about assembly language, also you will learn the architecture of Intel processor, this course will make you better in Assembly programming and debugging, hardware manipulation and data representation.

For this course you should have programmed in at least one high-level language such as Python, Java, C

Read more

This course focuses on programming microprocessors that compatible with Intel and AMD processors with 32 bit and 64 bit of Microsoft Windows.

In this course we will use MASM (Microsoft Macro Assembler) which is included in Microsoft Visual Studio using Irvine.

In this course you will learn basic principles about assembly language, also you will learn the architecture of Intel processor, this course will make you better in Assembly programming and debugging, hardware manipulation and data representation.

For this course you should have programmed in at least one high-level language such as Python, Java, C

This course will cover the following topics:

1-Number systems and data representation (Decimal, Binary and Hexadecimal, Binary and Hexadecimal addition and subtraction)

2- Assembly Language Fundamentals and defining data (types of registers, defining string, Mnemonics, Operands, Directives, Instructions and labels)

3-Data transfer instructions (MOV, MOVZX, MOVSX and XCHG)

4-Data related operators and directives (ALIGN, LENGTHOF, OFFSET, PTR, SIZEOF and TYPE)

5-Inderict addressing ( Indexed operands and Pointers)

6-Addition and subtraction (Flags affected by addition and subtraction, INC and DEC instructions)

7-Procedures and stack operations (CALL and RET instructions, Stack parameters, POP and PUSH and LEA instructions)

8-Boolean and comparisons instructions (AND, NOT, OR, TEST and XOR instructions)

9-Conditional jumps and loop instructions (Conditional structure, Unconditional JMP and LOOP instructions, Jump based on equality JE JNE JCXZ JECXZ, Jump based on signed comparisons, Jump based on unsigned comparisons, Jumps based on specific flag values, LOOPZ LOOPNZ LOOPE and LOOPNE instructions, While loops)

10-Shift and rotate instructions (RCL, RCR, ROL, ROR, SHL, SHR, SHLD and SHRD)

11-Multiplications and division instructions (MUL, IMUL, DIV and IDIV)

Enroll now

What's inside

Learning objectives

  • Write and debug assembly programs with masm at the machine level for x86 and intel64 processors
  • Number systems and data representation
  • Assembly language basic elements
  • Defining data
  • Data transfer instructions
  • Addition and subtraction
  • Operators and directives
  • Indirect addressing
  • Procedures and stack operations
  • Boolean and comparison instructions
  • Conditional jumps
  • Shift and rotate instructions
  • Multiplication and division instructions
  • Show more
  • Show less

Syllabus

Introduction

Introduction to Assembly Language for x86 Processors

Installing Visual Studio 2022 Community Edition

Setup Visual Studio 2022 for Assembly x86

Read more
How to convert binary, decimal and hexadecimal, binary and hexadecimal addition and subtraction
Introduction to number systems
Converting binary to hexadecimal
Converting hexadecimal to binary
Converting binary to decimal
Converting hexadecimal to decimal
Converting decimal to binary
Converting decimal to hexadecimal
Binary addition and subtraction
Hexadecimal addition
Hexadecimal subtraction
Negative numbers storage
Overflow
Integer and string constants, expressions, directives and instructions
Integer constants and expressions
Character and string constants
Reserved words and identifiers
Directives and Instructions
Labels
Mnemonics and Operands
Comments and No Operation instruction
Learn how to write programs
Defining data
Types of registers
Little-Endian and big-endian order
Template for Assembly Language Program without using Irvine32
A template for assembly language programs using Irvine32
Defining strings
B-1-Example program- Hello World
B-2-Example program without using Irvine32
B-3-Example program using Irvine32
B-4-Example Program-Unsigned Integer to binary-hexadecimal
C-Assignment 3 - bigEndian to littleEndian
Learn how to use mov, movzx, movsx and xchg instructions with example program and assignments
MOV instruction
MOVZX instruction
MOVSX instruction
XCHG instruction
B-Example Program- Case conversion
C-1-Assignment 1-Using 32 bit signed integer to calculate an expression
C-2-Assignment 2-Using 8 bit unsigned integer to calculate an expression
In this section you will learn how to use ALIGN, LENGTHOF, OFFSET, PTR, SIZEOF and TYPE instructions
ALIGN directive
LENGTHOF operator
Offset operator
PTR operator
SIZEOF operator
TYPE operator
In this section you will learn how to use INC and DEC instructions, pointers, indexed operands and flags
Flags affected by addition and subtraction
INC and DEC instructions
Arrays
Indexed operands
Pointers
B-Example Program - Summing an Array
Learn how to use procedures, PUSH, POP and LEA instructions
CALL and RET instructions
Stack parameters
POP instruction
PUSH instruction
LEA instruction
B-Example program-Reverses a string
C-Assignment 5 reverse string and count lowercase
Learn Boolean instructions such as OR, NOT, AND, XOR
AND instruction
NOT instruction
OR instruction
TEST instruction
XOR instruction
Learn how to use all jump and loop instructions
Unconditional JMP and LOOP instructions
Conditional structure
Jump based on equality JE JNE JCXZ JECXZ
Jump based on signed comparisons
Jump based on unsigned comparisons
Jumps based on specific flag values
LOOPZ LOOPNZ LOOPE and LOOPNE instructions
While loops
B-1-Example program-sum positive number
B-2-Example program Find the maximum integer in an array
B-3-Example program-Convert Java code to ASM code-While loop
B-4-Example Program- Generating random numbers
B-5-Example program-Copying a string from source to destination
C-Assignment 4-Fibonacci number sequence
Learn how to use all shift and rotate instructions such as RCL, RCR, ROL, ROR, SHL, SHR, SHLD and SHRD
RCL and RCR instructions
ROL instruction
ROR instruction
SHL instruction
SHR instruction
SHLD and SHRD instructions
B-Example program-Shift and rotate instructions
C-Assignment 8-Call two Procedures HexOutput and HexInput
Learn how to use MUL, IMUL, DIV and IDIV instructions
MUL instruction

Save this course

Save Assembly Language x86 Processors for beginners 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 Assembly Language x86 Processors for beginners with these activities:
Review Number Systems
Reinforce your understanding of number systems and data representation, which are fundamental to assembly language programming.
Browse courses on Number Systems
Show steps
  • Review decimal, binary, and hexadecimal number systems.
  • Practice converting between different number systems.
  • Work through addition and subtraction problems in binary and hexadecimal.
Read 'Assembly Language for x86 Processors' by Kip Irvine
Supplement your learning with a comprehensive textbook on x86 assembly language.
Show steps
  • Obtain a copy of 'Assembly Language for x86 Processors' by Kip Irvine.
  • Read the chapters relevant to the course topics.
  • Work through the examples and exercises in the book.
Assembly Language Coding Challenges
Sharpen your assembly language programming skills by completing coding challenges.
Show steps
  • Find online resources with assembly language coding challenges.
  • Attempt to solve the challenges using MASM and Irvine library.
  • Debug and test your code thoroughly.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Create a Cheat Sheet for Assembly Instructions
Consolidate your knowledge of assembly instructions by creating a cheat sheet.
Show steps
  • List all the assembly instructions covered in the course.
  • For each instruction, write a brief description of its function and syntax.
  • Organize the cheat sheet for easy reference.
Read 'Programming from the Ground Up' by Jonathan Bartlett
Gain a deeper understanding of assembly language by exploring a book that focuses on low-level programming.
Show steps
  • Obtain a copy of 'Programming from the Ground Up' by Jonathan Bartlett.
  • Read the chapters relevant to the course topics, focusing on the fundamentals.
  • Experiment with the examples provided in the book.
Develop a Simple Calculator in Assembly
Apply your assembly language skills by developing a practical application.
Show steps
  • Design the calculator's functionality and user interface.
  • Write the assembly code for the calculator's logic.
  • Test and debug the calculator thoroughly.
  • Add features such as memory and error handling.
Help other students in the discussion forums
Reinforce your understanding by helping other students with their questions and problems.
Show steps
  • Regularly check the course discussion forums.
  • Answer questions from other students to the best of your ability.
  • Explain concepts clearly and provide helpful examples.

Career center

Learners who complete Assembly Language x86 Processors for beginners will develop knowledge and skills that may be useful to these careers:
Malware Analyst
A malware analyst examines and dissects malicious software to understand its functionality, behavior, and impact. This career typically requires a master's degree. This course, with its emphasis on assembly language programming for x86 processors, may be highly valuable. Malware is often written or obfuscated using assembly language to evade detection and achieve low-level control over infected systems. Learning assembly language fundamentals, data representation, and debugging techniques, as covered in this course, helps build a strong foundation for malware analysis. In particular, the sections on Boolean and comparison instructions, conditional jumps and loop instructions, and shift and rotate instructions may prove especially helpful for reverse engineering malware.
Reverse Engineer
A reverse engineer analyzes software or hardware to understand its design, functionality, and implementation, often without access to the original source code or documentation. This course that focuses on programming microprocessors for Intel and AMD processors, particularly with MASM (Microsoft Macro Assembler), helps build a foundation for reverse engineering. By learning assembly language fundamentals, Intel processor architecture, and debugging techniques, you gain insights into how software interacts with hardware at a low level. Understanding data representation, operators, and instructions, as taught in this course, may provide a deeper understanding of disassembled code, aiding in the reverse engineering process. The modules on shift and rotate instructions, as well as multiplication and division instructions, may be especially helpful.
Exploit Developer
An exploit developer creates code that takes advantage of security vulnerabilities in software or hardware. This course, with its focus on assembly language programming for x86 processors, may be very relevant. A deep understanding of assembly language is often required to craft effective exploits. The course's coverage of assembly language fundamentals, data representation, and debugging techniques may provide the foundational knowledge needed to create exploits. The discussion of conditional jumps, loop instructions, shift, and rotate instructions may be particularly beneficial for those looking to understand and develop exploits.
Systems Programmer
A systems programmer develops and maintains system software, such as operating systems, device drivers, and system utilities. System programming often requires a deep understanding of hardware and low-level programming techniques. This course, focused on assembly language for x86 processors, may be directly relevant. This course helps build a strong foundation for understanding how system software interacts with hardware. Assembly language fundamentals, data representation, and memory management covered in the course may be valuable for anyone working on system-level software. In particular, the modules on procedures and stack operations, boolean and comparison instructions, and conditional jumps and loop instructions may prove particularly useful.
Firmware Engineer
A firmware engineer develops and maintains the low-level software that controls hardware devices. This course, centered around programming x86 processors using assembly language, may be highly relevant. Firmware engineers often work closely with microprocessors and need a deep understanding of their architecture and instruction sets. Learning about data transfer instructions, addition and subtraction, and procedures and stack operations, as covered in this course, helps build a strong foundation for working with firmware. The material on conditional jumps and loop instructions included in this course may be particularly beneficial.
Security Researcher
A security researcher investigates vulnerabilities in software and hardware systems. Assembly language knowledge, as taught in this course using x86 processors, may be valuable for analyzing malware, reverse engineering software, and understanding low-level security exploits. This course may help build a foundation for understanding how vulnerabilities are implemented at the machine level. By learning about assembly language fundamentals, data representation, and debugging techniques, security researchers may gain insights into how attackers exploit software and hardware. The sections covering Boolean and comparison instructions, conditional jumps and loop instructions, and shift and rotate instructions, could be particularly helpful for identifying and understanding security vulnerabilities.
Performance Engineer
A performance engineer analyzes and optimizes the performance of software systems. This course, by focusing on assembly language programming for x86 processors, may be valuable because it helps to understand how code executes at the machine level. Performance engineers often need to identify performance bottlenecks and optimize critical sections of code. Assembly language fundamentals, data representation, and instruction sets covered in this course helps build a strong foundation for performance analysis and optimization. The sections on shift and rotate instructions, as well as multiplication and division instructions, may be particularly useful.
Operating Systems Developer
An operating systems developer creates and maintains the core software that manages computer hardware and provides services for applications. This course, which focuses on assembly language for x86 processors, helps to explore the lower levels of operating system development. Assembly language knowledge is essential for understanding how operating systems interact directly with hardware. Learning about assembly language fundamentals, data representation, and memory management, as covered in this course, may provide a deeper understanding of operating system internals. In particular, the sections on procedures and stack operations may be helpful.
Compiler Developer
A compiler developer designs and implements compilers, which translate high-level programming languages into machine code. This course, focused on assembly language programming for x86 processors, may be useful, as it provides an understanding of the target architecture for many compilers. Knowing about data representation, instruction sets, and optimization techniques at the assembly level, as covered in this course, may help one to write more efficient compilers. By learning the basics of assembly language programming, the developer may better understand the machine level implications of compiler design decisions. The material on multiplication and division instructions may be particularly relevant.
Embedded Systems Engineer
An embedded systems engineer designs, develops, and tests software for embedded systems, which are computer systems designed for specific tasks within devices. This course, focusing on assembly language for x86 processors, may be valuable because embedded systems often require low-level programming and optimization for resource-constrained environments. Having an understanding of machine architecture helps to write optimized code. Learning about data representation, assembly language instructions, and memory management, as covered in this course, provides a foundation for working with embedded systems. The material on shift and rotate instructions may prove especially relevant.
Game Programmer
A game programmer develops the code that brings video games to life. Game programmers often need to optimize their code for performance, making assembly language knowledge helpful. This course, focused on programming x86 processors, may be relevant for game programmers who need to optimize critical sections of their game engine or write custom assembly code for specific hardware platforms. Understanding data representation, instruction sets, and memory management provided by this course may provide a deeper understanding of how game engines work at a low level. The course's sections on shift and rotate instructions and multiplication and division instructions may be particularly beneficial for game programmers.
Computer Architect
A computer architect designs and develops the architecture of computer systems, including processors, memory systems, and storage devices. This role typically requires an advanced degree (master's or PhD). This course, which focuses on assembly language programming for x86 processors, may be especially valuable. As a computer architect, a deeper understanding of assembly language may help in making informed decisions about processor design and optimization. Assembly language fundamentals, data representation, and instruction sets, as covered in this course, provide a solid foundation for understanding computer architecture principles.The course's coverage on multiplication and division instructions may be especially helpful.
Hardware Engineer
A hardware engineer designs, develops, and tests computer hardware components and systems. While hardware engineers primarily work with physical circuits and components, a basic understanding of assembly language programming, as taught in this course for x86 processors, may be beneficial. This is because it helps to understand how software interacts with hardware at a low level. Assembly language fundamentals, data representation, and instruction sets covered in this course may provide valuable context for hardware design decisions. The material on number systems and data representation may be particularly relevant.
Technical Support Engineer
A technical support engineer provides technical assistance to customers who are experiencing problems with software or hardware. Understanding assembly language, as taught in this course for x86 processors, may be useful for troubleshooting low-level software issues and understanding system behavior. The course may help one understand the root causes of software problems and provide more effective solutions. The modules on data representation, operators and directives, and indirect addressing may be particularly useful.
Software Quality Assurance Engineer
A software quality assurance engineer tests software to ensure that it meets quality standards and performs as expected. Knowledge of assembly language, as covered in this course for x86 processors, may enhance testing by understanding how software interacts with hardware at a low level. Assembly language fundamentals, data representation, and debugging techniques may provide insights into potential software defects. The sections on conditional jumps and loop instructions may be particularly helpful for identifying logical errors in software code.

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 Assembly Language x86 Processors for beginners.
Comprehensive guide to assembly language programming for x86 processors. It covers the fundamentals of assembly language, as well as advanced topics such as memory management, interrupts, and system programming. This book is commonly used as a textbook in assembly language courses and provides a solid foundation for understanding the concepts covered in this course. It offers numerous examples and exercises to reinforce learning.
Provides a low-level introduction to programming using assembly language. It focuses on the fundamentals of computer architecture and how assembly language interacts with the hardware. This book is particularly useful for understanding the underlying principles of assembly language and how it relates to higher-level programming languages. It's a good resource for gaining a deeper understanding of how computers work.

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