Assembly Language Adventures
Learn Assembly Language from scratch. No prior knowledge is assumed. Start from the very beginning with clear video lectures and fun exercises.
- 29+ hours of tough assembly programming videos.
- Exercises for every lecture (Open sourced).
- Mail support from the author at xorpd(&)xorpd.net
- 100% Money back guarantee: Didn't like it? You get your money back. No questions asked.
- Course Exercises (Fasm + Windows) [github]
- Course Exercises (Yasm + Linux) - Ported by Tyler Bohan of the New York University. [github]
- Course Code Examples [github]
- You are the kind of person who really likes to know how things work. In this course you are going to get solid understanding on how computer programs work from the inside.
- Become a better programmer - Knowing how things work down there will help you take better decisions, even as a high level programmer. If you were always wondering what is the stack, or what are those pointers everyone talks about, you came to the right place.
- Write faster code - When you really want to get the most of your processor, writing in raw Assembly is needed. We are not going to talk about optimizations in this course, however you will get a solid foundations so that you can continue exploring on your own.
- You want to become a reverse engineer or a security researcher, read the code of viruses or look for software vulnerabilities. As most of the time the original source code will not be available to you, solid understanding of x86 Assembly Language is mandatory.
- You are using a Windows operation system. (The course videos use Windows 7). It is recommended to use at least Windows XP.
- You have an intel x86 processor. (If you don't know what you have then you have x86 processor, trust me).
- Assembly flavour: x86 32 bits protected mode
- Assembler: The Flat Assembler (FASM)
- Debugger: WinDbg
Exercises and Code examples
The exercises and code examples of the course are open sourced. You can get them here.
What is Assembly Language?
A computer only knows how to execute a small set of commands, or instructions. Those are really simple commands, such as adding or subtracting numbers, comparing numbers and so on.
Assembly language is the language of those commands. Using Assembly language you can create computer programs that instruct a computer to do things in the most basic level possible.
Why learn x86 Assembly Language?
Course structure
The course is made of video lectures. A lecture could be from a presentation, or a real world example, showing me doing stuff at the computer.
Almost every video lecture is accompanied by some kind of exercise (You will be told during the lecture, don't worry :) ) The exercises are open source. They are attached here as a rar file, however you could also get them on github. (See "About this course" video for more information).
It is crucial that you complete the exercises. You will learn a lot from the lectures, but it is pretty much a waste of your time and money if you don't do the exercises. (Or at least verify that you know how to do them, if you are more experienced).
Course tech stack
No prior knowledge is assumed for this course, but I do assume some things regarding your system, so make sure that everything here describes you:
For the tech savvy, some more details about the tools we are going to use in this course:
Using Linux? Most of the exercises were ported to linux, however the videos show me using windows 7. Contact me if you are not sure.
What people say about the course
"If you want to learn x86 assembly this is the course for you. Xorpd presents great material from learning binary and hex, to analyzing assembly code through a debugger. Taking this course I had little knowledge of Assembly, now I am able to utilize the windows API to create windows programs . If you are skeptical about taking this course, it is worth it. The instructor is great at explaining concepts and he responds nearly immediately if you have a question.I had absolutely no problems with this course and I was writing x86 asm in no time. One thing I recommend if you end up taking this course is to do the work the instructor presents, it could really help you in the long run. Great course! I enjoyed it, and learned a lot!"
(Thomas)Frequently Asked Questions
Q: What does x86 Assembly code look like?
A: Here is an example:
sort_arr:
.arr_addr = 8h
.arr_len = 0ch
push ebp
mov ebp,esp
push esi
push edi
push ecx
push ebx
mov esi,dword [ebp + .arr_addr]
mov ecx,dword [ebp + .arr_len]
lea ebx,[esi + 4*ecx]
jecxz .no_elements
.outer_iter:
mov edi,esi
.inner_iter:
push edi
push esi
call compare_and_swap
add esp,4*2
add edi,4
cmp edi,ebx
jb .inner_iter
add esi,4
cmp esi,ebx
jb .outer_iter
.no_elements:
pop ebx
pop ecx
pop edi
pop esi
pop ebp
ret
This example shows some of the Fasm (Flat Assembler) syntax, 32 bits protected mode.
In this example we can see sort_arr - A function that sorts an array using the Bubble Sort algorithm. Inside the function some other function is being called. It is called compare_and_swap.
Q: How long will it take to complete the course?
A: It depends on many things. Mostly on your previous experience, and how much time you can allocate for this course.
The video course itself sums up to about 29 hours, and there are exercises for most of the lectures. As an absolute beginner, taking the complete course might take a month if you allocate a few hours a day. If you are more experienced it will probably take you less time to finish the course.
Q: Why choose Fasm as the course's assembler?
A: The short answer is that I chose Fasm because I tried many assemblers, and fasm was the one that seemed the most suitable (In my opinion).
Let me list the reasons for choosing Fasm:
- Fasm is Free and Open Source. In fact, Fasm is written in Fasm code.
- Fasm has a great community of assembly language enthusiastic developers.
- Fasm has intuitive syntax (resembles Nasm and Yasm syntax)
- Fasm has a very powerful Macro system. (This makes Fasm the choice of many hobbyist operation system developers). As a multi pass assembler, Fasm is capable of preprocessing abilities that other assemblers lack.
- Fasm has a built in Linker, so you don't need a separate linker to build EXE files on Windows for example.
- Fasm uses very few command line arguments (SSSO principle). Therefore using the fasm command line tools is usually much easier for newcomers, compared to other assemblers.
Q: Will it be easy to use other assembler (Like Yasm or Nasm) after taking this course with Fasm?
A: Yes. Most modern x86 assebmlers have very similar syntax, so it won't be a problem at all. For example, the Yasm Assembler syntax is pretty much the same as Fasm, except for a few macros and directives.
For the most part, the instructions are always the same. It is just the things around the instructions that change.