In my experience, an engaging way to teach (and learn) asm is to create shellcode for different platforms. This way, the students will be able to learn the basics of asm programming and test them right away. For instance, this is a good resource for Windows shellcoding:
"xchg rax,rax" is a collection of assembly gems and riddles I found over many years of reversing and writing assembly code. The book contains 0x40 short assembly snippets, each built to teach you one concept about assembly, math or life in general.
Be warned - This book is not for beginners. It doesn't contain anything besides assembly code, and therefore some x86_64 assembly knowledge is required.
How to use this book? Get an assembler (Yasm or Nasm is recommended), and obtain the x86_64 instruction set. Then for every snippet, try to understand what it does. Try to run it with different inputs if you don't understand it in the beginning. Look up for instructions you don't fully know in the Instruction sets PDF. Start from the beginning. The order has meaning.
In my experience, an engaging way to teach (and learn) asm is to create shellcode for different platforms. This way, the students will be able to learn the basics of asm programming and test them right away. For instance, this is a good resource for Windows shellcoding:
https://www.corelan.be/index.php/2010/02/25/exploit-writing-tutorial-part-9-introduction-to-win32-shellcoding/
Another fun way to learn is with this asm poetry book:
https://www.xorpd.net/pages/xchg_rax/snip_00.html
https://www.amazon.com/dp/1502958082
Instructions (from the hard copy book edition): http://smile.amazon.com/xchg-rax-xorpd/dp/1502958082/
; 0x40 assembly riddles
"xchg rax,rax" is a collection of assembly gems and riddles I found over many years of reversing and writing assembly code. The book contains 0x40 short assembly snippets, each built to teach you one concept about assembly, math or life in general.
Be warned - This book is not for beginners. It doesn't contain anything besides assembly code, and therefore some x86_64 assembly knowledge is required.
How to use this book? Get an assembler (Yasm or Nasm is recommended), and obtain the x86_64 instruction set. Then for every snippet, try to understand what it does. Try to run it with different inputs if you don't understand it in the beginning. Look up for instructions you don't fully know in the Instruction sets PDF. Start from the beginning. The order has meaning.