Welcome to the Assembly Programming Course! This course will introduce you to the fundamentals of assembly language using the NASM assembler. By the end of this course, you will have a solid understanding of how low-level programming works, and you will be able to write, debug, and optimize assembly programs.
This course is designed to teach you assembly language programming from the ground up. Over 13 weeks, we will cover topics such as:
- CPU architecture and registers
- Data representation and memory manipulation
- Control flow (loops, conditionals, and jumps)
- Functions and the call stack
- System calls and file handling
- Debugging and optimization
Each week will consist of a theoretical lecture and a practical session where you will write assembly programs.
- syllabus/: A detailed course syllabus and schedule.
- setup/: Instructions on how to install and configure NASM on different operating systems (Windows, Linux, macOS) and tools for debugging.
- lectures/: Weekly lecture materials, including theoretical notes and sample code.
- examples/: Additional example programs that demonstrate key concepts in assembly programming.
- assignments/: Weekly assignments for you to complete.
- solutions/: Solutions to assignments will be added here after the due dates.
- final_project/: Guidelines and examples for the final project.
- resources/: Extra resources like books, websites, and cheat sheets.
Before you begin, you need to install NASM and set up your development environment.
- Windows: Follow the Windows Setup Guide.
- Linux: Follow the Linux Setup Guide.
For debugging your assembly code, you can use the GNU Debugger (GDB). Follow the instructions in debugging.md to set up GDB.
Once NASM is installed, test your environment by compiling and running the sample Hello, World!
program in week01_intro. The instructions for compiling and running are provided in that folder.
By the end of this course, you should be able to:
- Understand how a CPU executes low-level instructions.
- Write assembly programs that perform arithmetic, control flow, and file operations.
- Work with CPU registers, memory, and the stack.
- Debug and optimize assembly code.
- Integrate assembly code with higher-level languages (e.g., C).
- Follow the Syllabus: Start with the syllabus.md to see the course outline.
- Set Up Your Environment: Go through the setup instructions for your operating system.
- Attend Lectures: Each week, review the notes and code examples in the
lectures/
folder. - Complete Assignments: Assignments are in the
assignments/
folder. Submit your solutions according to the course deadlines. - Review Solutions: After the assignment deadline, you can check the
solutions/
folder to compare your work. - Work on the Final Project: The final project guidelines are in the
final_project/
folder.
If you need help, please refer to the resources folder for additional reading materials, links to tutorials, and debugging tips. Feel free to ask questions during practical sessions or via the course communication channels.
This course will challenge you to think in new ways and will give you a deeper understanding of how computers work at the most fundamental level. Let's get started!