Assembly Language Tutorial v20201025

Introduction to Basic Concepts of Assembly Language

1.1 What is Assembly Language?

1.2 Applications of Assembly Language

1.3 What is a Virtual Machine?

1.4 Data Representation in Assembly Language

1.5 Binary (bit) Integers

1.6 Binary Addition Operations

1.7 Introduction to Bytes

1.8 Hexadecimal Integers

1.9 Two’s Complement and Base Conversion

1.10 Binary Subtraction Operations

1.11 How are Characters Represented in Computers?

1.12 Boolean Expressions in Assembly Language (NOT, AND, OR)

x86 Processor Architecture

2.1 Analysis of CPU Architecture and Operation Principles

2.2 32-bit x86 Processor Architecture

2.3 64-bit x86-64 Processor Architecture

2.4 x86 Computer Components

2.5 Computer I/O Input and Output Systems

Basics of Assembly Language

3.1 Your First Assembly Language Program

3.2 Constants in Assembly Language

3.3 Reserved Words in Assembly Language

3.4 Identifiers and Naming Rules in Assembly Language

3.5 Pseudoinstructions in Assembly Language

3.6 Detailed Explanation of Assembly Language Instructions

3.7 Examples of Integer Addition and Subtraction in Assembly Language

3.8 Assembler and Assembly Process: Detailed Explanation of Data Types and Definitions in Assembly Language

3.9 Assembly Language Equivalence Pseudoinstruction =

3.10 Calculating Array and String Lengths in Assembly Language

3.11 Assembly Language EQU Pseudoinstruction

3.12 Assembly Language TEXTEQU Pseudoinstruction

3.13 64-bit Programming in Assembly Language

Operators, Instructions, and Arithmetic Operations Related to Data in Assembly Language

4.1 Operand Types in Assembly Language

4.2 MOV Instruction in Assembly Language: Copying Source Operand to Destination Operand

4.3 MOVZX and MOVSX Instructions in Assembly Language

4.4 LAHF and SAHF Instructions in Assembly Language

4.5 XCHG Instruction in Assembly Language: Swapping Contents of Two Operands

4.6 Direct Offset Operands in Assembly Language

4.7 Data Transfer Examples in Assembly Language

4.8 Detailed Explanation of Addition and Subtraction in Assembly Language

4.9 OFFSET Operator in Assembly Language: Returns the Offset of a Data Label

4.10 ALIGN Pseudoinstruction in Assembly Language: Aligning a Variable

4.11 PTR Operator in Assembly Language: Redefining the Size Type of an Operand

4.12 TYPE Operator in Assembly Language: Returns the Size of a Variable

4.13 LENGTHOF Operator in Assembly Language: Calculates the Number of Elements in an Array

4.14 LABEL Pseudoinstruction in Assembly Language

4.15 Indirect Addressing in Assembly Language

4.16 JMP and LOOP Instructions in Assembly Language

4.17 64-bit MOV Instruction in Assembly Language

4.18 64-bit Addition and Subtraction in Assembly Language

Procedures in Assembly Language

5.1 Procedures in Assembly Language

5.3 PUSH and POP Instructions in Assembly Language (Stack Push and Pop)

5.4 PROC and ENDP Pseudoinstructions in Assembly Language: Defining a Procedure

5.5 CALL and RET Instructions in Assembly Language: Calling a Procedure

5.6 Nesting of Procedure Calls in Assembly Language

5.7 Example in Assembly Language: Summing an Integer Array

5.8 USES Operator in Assembly Language: Saving and Restoring Registers

5.9 Introduction to Assembly Language Libraries

5.10 Irvine32 Library in Assembly Language

5.11 Detailed Explanation of Irvine32 Library Procedures_1

5.11 Detailed Explanation of Irvine32 Library Procedures_2

5.12 Irvine64 Library in Assembly Language

Conditional Statements in Assembly Language

6.1 Conditional Statements in Assembly Language

6.2 AND Instruction in Assembly Language: Performing Logical (Bitwise) AND on Two Operands

6.3 OR Instruction in Assembly Language: Performing Logical (Bitwise) OR on Two Operands

6.4 Bit Vectors (Bit Mapping) in Assembly Language

6.5 XOR Instruction in Assembly Language: Performing Logical (Bitwise) XOR on Two Operands

6.6 NOT (Complement) Instruction in Assembly Language: Flipping All Bits of an Operand

6.7 TEST Instruction in Assembly Language: Performing Logical (Bitwise) AND on Two Operands

6.8 CMP (Compare) Instruction in Assembly Language: Comparing Integers

6.9 Setting and Clearing Individual CPU Flags in Assembly Language

6.10 Boolean Instructions in 64-bit Mode in Assembly Language

6.11 Introduction to Conditional Jumps in Assembly Language

6.12 Summary of Conditional Jump Instructions in Assembly Language

6.13 Applications and Examples of Conditional Jumps in Assembly Language

6.14 LOOPZ (Zero Jump) and LOOPE (Equal Jump) Instructions in Assembly Language

6.15 LOOPNZ (Non-Zero Jump) and LOOPNE (Not Equal Jump) Instructions in Assembly Language

6.16 Implementing IF Statements in Assembly Language

6.17 Implementing Logical Expressions in Assembly Language

6.18 Implementing WHILE Loops in Assembly Language

6.19 Table-Driven Selection in Assembly Language

6.20 Finite State Machines (FSM) and Assembly Language [with Examples]

6.21 Conditional Control Flow Pseudoinstructions in Assembly Language

6.22 .IF, .ELSE, .ELSEIF, .ENDIF Pseudoinstructions in Assembly Language

6.23 Implementing Loops with .REPEAT and .WHILE Pseudoinstructions in Assembly Language

Integer Operations in Assembly Language

7.1 Introduction to Shift and Rotate Instructions in Assembly Language

7.2 SHL (Shift Left) Instruction in Assembly Language: Logically Shifting an Operand Left by One Bit

7.3 SHR (Shift Right) Instruction in Assembly Language: Logically Shifting an Operand Right by One Bit

7.4 SAL (Arithmetic Shift Left) and SAR (Arithmetic Shift Right) Instructions: Shifting an Operand Left/Right by One Bit

7.5 ROL (Rotate Left) Instruction in Assembly Language: Rotating All Bits of an Operand Left

7.6 ROR (Rotate Right) Instruction in Assembly Language: Rotating All Bits of an Operand Right

7.7 RCL (Rotate Left with Carry) and RCR (Rotate Right with Carry) Instructions in Assembly Language

7.8 SHLD (Double Precision Shift Left) and SHRD (Double Precision Shift Right) Instructions in Assembly Language

7.9 Applications of Shifting and Rotating in Assembly Language

7.10 MUL Instruction in Assembly Language: Unsigned Multiplication

7.11 IMUL Instruction in Assembly Language: Signed Multiplication

7.12 GetMseconds: Measuring Program Execution Time in Assembly Language

7.13 DIV Instruction in Assembly Language: Unsigned Division

7.14 IDIV Instruction in Assembly Language: Signed Division

7.15 Implementing Arithmetic Expressions in Assembly Language [Example]

7.16 ADC Instruction in Assembly Language: Addition with Carry

7.17 SBB Instruction in Assembly Language: Subtraction with Borrow

7.18 ASCII and Unpacked Decimal Operations in Assembly Language

7.19 AAA Instruction in Assembly Language: Adjusting the Result of ADD or ADC Instructions

7.20 AAS Instruction in Assembly Language: Adjusting After Subtraction

7.21 AAM (ASCII Adjust After Multiply) and AAD (ASCII Adjust Before Divide) Instructions in Assembly Language

7.22 Introduction to Packed Decimal Operations in Assembly Language

7.23 DAA Instruction in Assembly Language: Adjusting After Addition

7.24 DAS Instruction in Assembly Language: Adjusting After Subtraction

Advanced Procedures in Assembly Language

8.1 Introduction to Stack Frames in Assembly Language

8.2 Disadvantages of Register Parameters in Assembly Language

8.3 Accessing Stack Parameters in Assembly Language: Detailed Explanation

8.4 Introduction to Common 32-bit Calling Conventions

8.5 Application of Local Variables in Assembly Language

8.6 Introduction to Reference Parameters in Assembly Language

8.7 LEA Instruction in Assembly Language: Returning the Address of an Indirect Operand

8.8 ENTER and LEAVE Instructions in Assembly Language: Creating and Ending Stack Frames

8.9 LOCAL Pseudoinstruction in Assembly Language: Declaring One or More Variable Names

8.10 Introduction to Microsoft x64 Calling Conventions

8.11 Detailed Explanation of Recursion and Applications in Assembly Language [with Examples]

8.12 INVOKE Pseudoinstruction in Assembly Language: Pushing Parameters onto the Stack and Calling a Procedure

8.13 ADDR Operator in Assembly Language: Passing Pointer Parameters

8.14 PROC Pseudoinstruction in Assembly Language: Procedure Definition

8.15 PROTO Pseudoinstruction in Assembly Language: Specifying External Procedures

8.16 Introduction to Procedure Parameters in Assembly Language

8.17 WriteStackFrame Procedure in Assembly Language: Displaying the Contents of the Current Procedure’s Stack Frame

8.18 Overview of Multi-Module Programs in Assembly Language

8.19 EXTERN Pseudoinstruction in Assembly Language: Calling External Procedures

8.20 Using Variables and Labels Across Modules in Assembly Language

8.21 Creating Modules with Extern Pseudoinstruction in Assembly Language [with Examples]

8.22 Creating Modules with INVOKE and PROTO in Assembly Language

8.23 Considerations for Using the USES Operator in Assembly Language

8.24 Passing 8-bit and 16-bit Parameters to the Stack in Assembly Language

8.25 Passing 64-bit Parameters in 32-bit Mode in Assembly Language

8.26 Non-Double Word Local Variables in Assembly Language

8.27 How the Java Virtual Machine (JVM) Works

Strings and Arrays in Assembly Language

9.1 Introduction to Basic String Instructions in Assembly Language

9.2 MOVSB, MOVSW, and MOVSD Instructions in Assembly Language: Moving Data to Memory Pointed by EDI

9.3 CMPSB, CMPSW, and CMPSD Instructions in Assembly Language: Comparing Two Operands

9.4 SCASB, SCASW, and SCASD Instructions in Assembly Language: Searching for a Value in a String or Array

9.5 STOSB, STOSW, and STOSD Instructions in Assembly Language: Storing the Contents of AL/AX/EAX into Memory Pointed by EDI

9.6 LODSB, LODSW, and LODSD Instructions in Assembly Language: Loading a Byte or Word

9.7 Detailed Explanation of Irvine32 String Procedures [with Examples]_1

9.7 Detailed Explanation of Irvine32 String Procedures [with Examples]_2

9.8 Detailed Explanation of Irvine64 String Procedures [with Examples]

9.9 Introduction to Two-Dimensional Arrays in Assembly Language

9.10 Overview of Bubble Sort in Assembly Language

9.11 Overview of Binary Search in Assembly Language

9.12 How Java Handles Strings and Common Methods

Structures and Macros in Assembly Language

10.1 STRUCT and ENDS Pseudoinstructions in Assembly Language: Defining Structures

10.2 Declaring Structure Variables in Assembly Language

10.3 TYPE and SIZEOF Operators in Assembly Language: Referencing Structure Variables and Structure Names

10.4 Example: Displaying System Time in Assembly Language

10.5 Overview of Nested Structures in Assembly Language [with Examples]

10.6 Declaration and Use of Unions in Assembly Language

10.7 Overview of Macro Procedures in Assembly Language

10.8 MACRO and ENDM Pseudoinstructions in Assembly Language: Defining Macros

10.9 Overview of Macro Calls in Assembly Language

10.10 Characteristics of Macros in Assembly Language

10.11 Detailed Explanation of Macro Libraries in Assembly Language

10.12 Example: Wrapper in Assembly Language

10.13 Overview of Conditional Assembly Pseudoinstructions in Assembly Language

10.14 IFB and IFNB Pseudoinstructions in Assembly Language: Checking for Missing Parameters

10.15 Setting Default Values and Boolean Expressions in Macros in Assembly Language

10.16 IF, ELSE, and DENDIF Pseudoinstructions in Assembly Language

10.17 IFIDN and IFIDNI Pseudoinstructions in Assembly Language: Comparing Two Parameters

10.18 Example: Row Sum of a Matrix in Assembly Language

10.19 Overview of Replacement (&), Text (<>,), Character (!), and Expansion (%) Operators in Assembly Language

10.20 Macro Functions in Assembly Language

10.21 Defining Repetitive Statement Blocks with WHILE, REPEAT, FOR, and FORC Pseudoinstructions in Assembly Language

MS-Windows Programming in Assembly Language

11.1 Overview of MS-Windows Programming in Assembly Language

11.2 Overview of Win32 Console Functions in Assembly Language

11.3 MessageBoxA Function in Assembly Language: Displaying a Message Box

11.4 ReadConsole Function in Assembly Language: Reading Text Input and Sending it to Buffer

11.5 GetLastError and FormatMessage Functions in Assembly Language: Retrieving Error Information

11.6 Overview of Single Character Input in Assembly Language

11.7 GetKeyState Function in Assembly Language: Obtaining Keyboard State

11.8 WriteConsole and WriteConsoleOutputCharacter Functions in Assembly Language: Console Output

11.9 CreateFile Function in Assembly Language: Creating a New File or Opening an Existing File

11.10 CloseHandle Function in Assembly Language: Closing an Open Object Handle

11.11 ReadFile Function in Assembly Language: Reading Text from Input File

11.12 WriteFile Function in Assembly Language: Writing Data to a File

11.13 SetFilePointer Function in Assembly Language: Moving the Position Pointer of an Open File

11.14 Irvine32 Library File I/O (Input/Output) in Assembly Language

11.15 Example: File I/O Process in Assembly Language

11.16 Console Window Operations in Assembly Language

11.17 Overview of Console Cursor Setting Functions in Assembly Language

11.18 SetConsoleTextAttribute and WriteConsoleOutputAttribute Functions in Assembly Language: Controlling Text Color

11.19 Win32 Time and Date Functions in Assembly Language

11.20 Overview of 64-bit Windows API Usage in Assembly Language

11.21 How to Write Graphical Windows Applications in Assembly Language

11.22 MessageBox Function in Assembly Language: Displaying a Simple Message Box

11.23 WinMain Procedure in Assembly Language: Application Startup Process

11.24 WinProc Procedure in Assembly Language: Receiving and Processing All Window-Related Event Messages

11.25 ErrorHandler Procedure in Assembly Language: Retrieving Error Information

11.26 Example: Windows Graphical Program in Assembly Language

11.27 Dynamic Memory Allocation (Heap Allocation) in Assembly Language

11.28 Example: Dynamic Memory Allocation in Assembly Language

11.29 Overview of x86 Memory Management in Assembly Language

11.30 Overview of Linear Addresses in Assembly Language

11.31 Page Translation: Converting Linear Addresses to Physical Addresses in Assembly Language

Floating Point Processing and Instruction Encoding in Assembly Language

12.1 IEEE Binary Floating Point Representation in Assembly Language

12.2 Introduction to Exponents in Assembly Language

12.3 Normalized Binary Floating Point Numbers in Assembly Language

12.4 Converting Decimal Fractions to Binary Real Numbers in Assembly Language

12.5 FPU Register Stack in Assembly Language

12.6 FPU Rounding: Calculating Accurate Results for Floating Point Numbers in Assembly Language

12.7 Floating Point Exceptions and Common Instruction Sets in Assembly Language

12.8 Floating Point Arithmetic Operation Instructions in Assembly Language

12.9 FCOM Instruction in Assembly Language: Comparing Floating Point Values

12.10 Reading and Writing Floating Point Values in Assembly Language

12.11 FWAIT (WAIT) Instruction in Assembly Language: Exception Synchronization

12.12 Overview of Mixed Mode Operations in Assembly Language

12.13 Overview of Masking and Unmasking Exceptions in Assembly Language

12.14 Overview of x86 Instruction Encoding in Assembly Language

12.15 Overview of Single Byte Instructions and Immediate Operands in Assembly Language

12.16 Overview of Register Mode Instructions in Assembly Language

12.17 Effects and Significance of Operand Size Prefixes in Assembly Language

12.18 Overview of Memory Mode Instructions in Assembly Language

High-Level Language Interfaces in Assembly Language

13.1 Interface Specifications for High-Level Languages Calling Assembly Language

13.2 MODEL Pseudoinstruction in Assembly Language: Determining Program Characteristics

13.3 Viewing Assembly Language Code Generated by C/C++ Compilers

13.4 Visual C++ __asm Pseudoinstruction: Inline Assembly Code in C/C++

13.5 Inline Assembly Code Example in C/C++: File Encryption

13.6 Calling Assembly Language Functions from C/C++

13.7 Assembly Language Calling C/C++ Library Functions

13.8 Example of Calling C/C++ from Assembly Language: Multiplication Table

13.9 Calling C/C++ Library Functions from Assembly Language

13.10 Example of Calling Assembly Language from C/C++: Directory Listing Program

Assembly Language Tutorial v20201025

Leave a Comment