I'm looking for something along the lines of "A Tour of Go" [1] or "The Rust Programming Language" [2], but for learning x86 assembly. Searching the Internet for x86 resources turns up a large number of web pages (often for a university's operating systems or security course) introducing only the simplest basics. On the other hand, I'm aware of reference materials such as Agner Fog's instruction tables [3], but these are intended for reference, not for acquiring proficiency. One more point to clarify is that I'm comfortable with assembly in general, but I'm not well-versed with <i>x86</i> assembly in particular and am thus looking specifically for resources on x86. I would greatly appreciate any pointers!<p>[1] https://go.dev/tour/<p>[2] https://doc.rust-lang.org/book/<p>[3] https://www.agner.org/optimize/instruction_tables.pdf
Here's a free ebook - though it's x64: <a href="https://www.syncfusion.com/succinctly-free-ebooks/assemblylanguage" rel="nofollow">https://www.syncfusion.com/succinctly-free-ebooks/assemblyla...</a><p>I thought Peter Norton's Assembly Language was a good book and you might still be able to find a copy to order for a decent price.
I'm no x86 assembly expert but what I learned, I learned by reverse engineering.
I don't know if that will teach you what you want to learn but I thought it was useful - I'd learned Atmel AVR assembly years ago so I knew the concepts. I looked at some short functions of Visual C++/gcc-generated assembly then I looked up the instructions and before too long I was familiar enough with the 20 to 30 instructions that most modern compilers use.
The Art of Assembly Language is IBM PC based. Alternatively, if you learn any Assembly language, you'll probably be ok to start from the reference materials for x86, depending on how into the weeds of early boot you're going to go. (Personally, I say, make your kernel multiboot compatible, and let someone else worry about loading your kernel; plenty of stuff to do without writing a bootloader)
I would read some intro on x86 instructions, and then use Compiler Explorer [1] to create assembler instructions for code from a language I know (e.g. C, Pascal, etc) to learn how their primitives (method calls, loops, branching, etc) translate into actual assembler.<p>[1] <a href="https://godbolt.org/" rel="nofollow">https://godbolt.org/</a>