I have a strong background in higher level languages (Java, Php, Python, etc). A little background in C.<p>The way I self-taught programming was to just build shit.<p>What is the best way to learn assembly?<p>Thanks
• Jeff Duntemann wrote a book some years ago, <i>Assembly Language Step By Step</i>, that covers Linux assembly language programming: <a href="http://www.duntemann.com/assembly.html" rel="nofollow">http://www.duntemann.com/assembly.html</a><p>• Just typing "gnu assembly language" in a search engine will bring up lots of tutorials, mostly produced by colleges.<p>• Stack Overflow on your exact question: <a href="https://stackoverflow.com/questions/721583/what-is-the-best-way-to-learn-x86-assembly-on-a-linux-platform" rel="nofollow">https://stackoverflow.com/questions/721583/what-is-the-best-...</a><p>• The Linux Assembly HOWTO <a href="http://www.tldp.org/HOWTO/html_single/Assembly-HOWTO/" rel="nofollow">http://www.tldp.org/HOWTO/html_single/Assembly-HOWTO/</a> referenced by the Linux Assembly site at <a href="http://asm.sourceforge.net/" rel="nofollow">http://asm.sourceforge.net/</a><p>• <a href="http://www.int80h.org/" rel="nofollow">http://www.int80h.org/</a> covers the differences between Linux and UNIX/BSD programming and how to write portable code; definitely worth studying.
Assembly language is mostly mnemonics for the individual instructions available in the hardware of a microprocessor. So you need to pick a microprocessor family, study the hardware (registers, different memories), and what each instruction does. The popular microprocessor architectures are: ARM, X86 (Intel, AMD), and the new open source RISC-V.
Start with "Computer Architecture" by Hennessy and Patterson.
Modern architectures overlap many instructions, this is part of the cause for Specter and Meltdown. Add a number to a register, the result won't be there immediately. A branch tests true, the branch will not complete for a couple of cycles.