We teach ARM assembly in the first semester, and try to make the learning experience as engaging, smooth, and fun as possible. The biggest issue we face is the toolchain, which leads to inconvenient situations for many students. Especially debugging and problem location is a major issue that many students face when programming ARM assembly.
As a remedy an ARM simulator would be incredibly useful. The idea is that it would read ARM instructions directly and execute them one by one on a simulated CPU and main memory. Register values, memory excerpts, and the stack should be visible to allow for easy debugging and execution tracing. Additionally, a REPL interface should allow students to quickly test out ideas and change the CPU state.
The simulator should be able to:
- read and interpret an ARMv5 instruction
- execute the instruction on a simulated CPU and main memory
- parse ARM source code including memory declarations and constant definitions
- show views of
- user chosen parts of main memory
- the stack
- emulate the basic system calls we use in the lecture
As a first reference, take a look at CPUlator.