Welcome to the 32-bit ARMv4 Assembly Language Tutorial repository!
This tutorial is designed for those who want to understand low-level programming using real assembly code on the ARMv4 architecture. It’s hands-on, beginner-friendly, and pairs nicely with C code for comparison.
- How to write, run, and debug assembly code for ARMv4
- The relationship between C and assembly at the binary level
- ARM's memory model, registers, calling conventions, and more
- How to use tools like
arm-none-eabi-gcc
,as
,objdump
,qemu
, andgdb
Each directory covers a single concept with example code and explanations:
01_hello-assembly/ 👉 Your first assembly run!
02_moving-data-around/ 👉 Moving data between registers and immediates
03_doing-math/ 👉 Arithmetic operations (add, sub, neg)
04_store-to-memory/ 👉 Store/load data to memory
05_branching/ 👉 Conditional branches and condition flags
06_comparing-values/ 👉 Comparing values with CMP
07_advanced-topics/ 👉 Loops, floating point, pointers, arrays, etc.
Each folder contains:
- Assembly and/or C code files
- A
README.md
with goals, explanations, and run instructions
arm-none-eabi-gcc
toolchainqemu-system-arm
andgdb-multiarch
orarm-none-eabi-gdb
- Basic understanding of C (helpful but not required)
Install on Ubuntu:
sudo apt install qemu gdb-multiarch
- Students learning computer architecture or embedded systems
- Developers curious about how C translates to machine code
- Anyone who wants to really understand what’s happening under the hood
If you’d like to:
- Add examples for new instructions
- Improve explanations
- Fix errors or typos
Feel free to submit a Pull Request or open an Issue!
This project is licensed under the MIT License.
Happy Hacking!
– seojun