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