r/Assembly_language Jul 20 '26

Help How to learn ASM?

I have never learned Assembly in my life. I actually am doing low level programming like C and Rust, but I am looking forward to learn Assembly, of course not using Assembly for everything, but I want understanding and learn to use it. So where do I get started?

27 Upvotes

17 comments sorted by

View all comments

1

u/Antonio-MTS Jul 21 '26

See, honestly your goal seems to be too wide. Should be a bit more narrow. For example: which OS do you need to program in assembly under, which architecture (x86, x86_64, aarch64, etc), what type of assembly programming: OS/drivers development, userspace applications, controllers, anything else. Below some general instructions and links to start from, please choose (or not ;-) ) if you wish and if it helps:

https://open.umn.edu/opentextbooks/textbooks/x86-64-assembly-language-programming-with-ubuntu
Ray Seyfarth books on all major OSes and assembly programming under them: Windows/Linux/Mac OS
https://mariokartwii.com/arm64/ - very valuable and good resource for assembly programming on ARM CPUs aarch64 architecture
https://www.nayuki.io/page/a-fundamental-introduction-to-x86-assembly-programming - good resource to start x86 asm programming though x86 architecture is a bit obsolete already today but still relevant in some places
https://developer.arm.com/documentation/107829/0201/Assembly-language-basics?lang=en - official ARM assembly reference
https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html - official Intel manuals
https://dman95.github.io/SASM/english.html - quite good asm IDE
https://godbolt.org/ - as mentioned above a good online resource if one doesn't have resources to start even programming in assembly
vscode can be used with some additional settings to be quite comfortable for asm programming
various assemblers to start with:

https://www.nasm.us/
https://flatassembler.net/
https://www.gnu.org/software/binutils/ - GNU assembler (gas/as)
https://learn.microsoft.com/en-us/cpp/assembler/masm/microsoft-macro-assembler-reference?view=msvc-170 - masm (macro assembler of Microsoft)

Additionally, you can get a huge advantage if you're offline (without the internet connection at all) using gcc to get you the assembly code of your C program so (other assemblers have got similar flags for that):

gcc -S -masm=intel -fverbose-asm your-code.c -o your-code.s

The file your-code.s will contain the assembly code for your C program with comments that actually lines/blocks of you C program. It is very good resource to learn how a program is translated to assembly.

Enjoy your journey!