Course Description:
This course provides an in-depth understanding of x86_64 assembly language programming, covering fundamental concepts and techniques for low-level software development. Students will learn how to write, analyze, and optimize assembly code for the x86_64 architecture.
Prerequisites:
Basic programming knowledge (C/C++ recommended)
Familiarity with computer architecture
Overview of assembly language and its role in software development
Introduction to x86_64 architecture and instruction set
Assembly language vs. high-level languages
Setting up development environment: assemblers, debuggers
Syntax and structure of x86_64 assembly code
Data representation and addressing modes
Arithmetic and logical instructions
Control flow instructions: jumps and branches
Memory hierarchy and addressing modes
Load and store instructions
Data conversion and manipulation
Bitwise operations and shifts
Stack organization and frame pointers
Function calling conventions
Parameter passing: registers and stack
Recursive functions and stack management
SIMD instructions for vector operations
Debugging and optimization techniques
Inline assembly in high-level languages
Introduction to Linux system calls
Course Objectives:
-
Introduction to Assembly: Familiarize students with the significance of assembly language and its role in low-level programming.
-
x86_64 Architecture: Understand the fundamentals of the x86_64 architecture and its instruction set.
-
Syntax and Basics: Grasp the syntax and structure of x86_64 assembly language and basic data manipulation instructions.
-
Memory Access: Learn various addressing modes and memory access techniques for efficient data handling.
-
Control Flow: Master control flow instructions like jumps and branches for program execution control.
-
Function Calls: Explore function calling conventions, parameter passing, and stack management for modular code development.
-
Data Manipulation: Gain proficiency in data conversion, bitwise operations, and shifts.
-
Debugging and Optimization: Learn debugging strategies and optimization techniques for efficient assembly code.
-
SIMD Instructions: Understand SIMD instructions for parallel processing and vector operations.