- 2m
- 4m
- 11m
- 4. Labels And Memory Layout 8m read
- 5. Registers and Values 14m read
- 6. Calling the kernel 11m read
- 7. ADR Instruction 7m read
- 8. Branching And Jumping Around Your Program 9m read
- 9. Quiz on what you learned so far ~14m quiz
ARM64 Assembly: Programming Arm Processors from the Ground Up
About this course
Go from your first ARM64 instruction to writing fast, practical assembly that works with Linux, C, and modern hardware. You do not need an ARM processor to follow this course, we use an emulator.
The ARM64 Assembly Language Masters Course teaches AArch64 assembly from the ground up through clear explanations, guided demonstrations, runnable examples, quizzes, and hands-on assignments. You’ll begin by configuring the GNU assembler and QEMU environment, then write your first program and learn how registers, labels, memory, addresses, branches, and Linux system calls really work.
As your skills develop, you’ll explore integer and floating-point arithmetic, conditional logic, loops, the stack, strings, subroutines, and the ARM64 calling convention. You’ll learn how C and assembly communicate, including pointer and structure arguments, functions with more than eight parameters, large return values, callbacks, and calls into the C standard library.
The advanced sections take you beyond basic syntax and into real systems programming. You’ll implement bit masks and CRC-32, vectorize a dot product with NEON SIMD, build a thread-safe atomic counter using exclusive instructions, call functions through pointers, and create a position-independent shared library using the Global Offset Table.
By the end of the course, ARM64 assembly will no longer look like mysterious low-level code. You’ll understand how instructions, memory, operating-system services, compilers, linkers, calling conventions, and hardware work together—and you’ll be able to write, test, debug, and integrate ARM64 assembly with confidence.
What you’ll learn
- Write and run ARM64 assembly programs on Linux
- Work confidently with registers, memory, pointers, and the stack
- Build branches, loops, arithmetic, and floating-point operations
- Call Linux system services directly
- Create reusable subroutines that follow AAPCS64
- Mix ARM64 assembly with C in both directions
- Pass pointers, structures, callbacks, and large values
- Use the C standard library from assembly
- Apply bitwise operations to practical problems such as CRC-32
- Accelerate calculations with NEON SIMD
- Implement atomic operations and understand memory ordering
- Build position-independent code and shared libraries
Who this course is for
This course is ideal for programmers, reverse engineers, security researchers, emulator developers, embedded developers, and anyone who wants to understand ARM64 beyond the compiler’s output.
No previous assembly-language experience is required. Basic programming knowledge is helpful, and some familiarity with C will benefit you in the interoperability sections.
What you'll learn
- Write and run ARM64 assembly programs on Linux
- Understand ARM64 registers, values, labels, and memory layout
- Work with addresses, pointers, strings, and structured data
- Call Linux system services directly from assembly
- Create conditional branches, loops, and program logic
- Perform integer, floating-point, and bitwise operations
- Use the stack safely and maintain proper alignment
- Create reusable subroutines using the ARM64 calling convention
- Mix C and ARM64 assembly code in both directions
- Pass arguments, pointers, structures, and large return values
- Call C standard-library functions from assembly
- Build practical programs such as a password checker and CRC-32 calculator
- Accelerate calculations using NEON SIMD instructions
- Implement thread-safe atomic operations and memory ordering
- Use function pointers, callbacks, and indirect calls
- Build position-independent code and shared libraries
- Debug, test, and verify ARM64 assembly programs
- Understand how processors, compilers, linkers, and operating systems work together
Who this course is for
- Reverse engineers
- People interested in ARM64
- Emulator Developers
- Security Researchers
- Low level programmers
Requirements
- Ability to install a Ubuntu virtual machine (its free and easy)
- Some C experience is recommended but not required
Curriculum
42 Lessons • ~8h 19m estimated learning time- 10. Simple Program Assignment ~20m challenge
- 11. Conditional Jumping 11m read
- 12. Conditional Jumping Video Demonstration 9m
- 13. Mathematics In Assembly 12m read
- 14. Math Assembly Quiz ~10m quiz
- 15. Math Assembly Assignment ~20m challenge
- 16. Floating point operations 15m read
- 17. Floating point operations video 7m
- 18. Floating point operation assignment ~20m challenge
- 19. The stack and how to use it 8m read
- 20. The stack video demonstration 15m
- 21. Stack quiz ~12m quiz
- 22. Stack Assignment ~20m challenge
- 23. Storing integers and strings in memory 13m read
- 24. Copying a string from one string to another ~20m challenge
- 25. Calling and returning from subroutines 13m read
- 26. Mixing C with assembly Code 7m read
- 27. Mixing C With Assembly Code Video Demonstration 14m
- 28. Passing More Arguments and Returning Large Values 12m read
- 29. C With Assembly Quiz ~8m quiz
- 30. Pointer Arguments and Passing Structures by Value 14m read
- 31. Pre-indexed and post indexed addressing 10m read
- 32. Using the C Standard Library From Assembly 19m read
- 33. Building a password check with assembly language 13m read
- 34. Bitwise Logic And Masks 8m read
- 35. Bitwise Masks Assignment ~20m challenge
- 36. Bitwise Programming with CRC-32 6m read
- 37. NEON SIMD Dot Product 5m read
- 38. Atomic Operations and Memory Ordering 6m read
- 39. Function Pointers and Indirect Calls 6m read
- 40. Position-Independent Shared Libraries 8m read
- 41. Create a CRC-32 hash function that gets called from C ~20m challenge
- 42. Create a in-memory book library program In Assembly Language ~20m challenge
- 4.90 instructor rating
- 18 courses
- 1,418 students worldwide
Daniel McCarthy
Daniel McCarthy is a seasoned software engineer, boasting an impressive career spanning over 14 years in the industry. Holding a Master's Degree in Advanced Computer Science from Cardiff Metropolitan University, his broad spectrum of experience encompasses everything from web development to complex compiler and interpreter development.
Daniel has honed his skills in bootloader and kernel development. In testament to his proficiency in the field, he has designed two proprietary programming languages: Craft, a general-purpose language, and Marble, a web-focused language akin to PHP. Moreover, he has successfully developed compilers for the C programming language.
A testament to his versatility, Daniel demonstrates proficiency in an extensive list of programming languages that includes C, C++, Java, x86 Assembly language, PIC assembly, SQL, PHP, HTML5, JavaScript, CSS, and of course, his own creations, Craft and Marble.
His professional portfolio also includes the development of Linux kernel modules, a task he has executed with proficiency in a professional context. Currently, Daniel is channeling his wealth of experience and expertise into the education sector, with the aim of nurturing the next generation of professional software engineers.
Student reviews
No student reviews have been posted yet.