I remember studying this book in my undergrad which was pretty good and covered how programs look in assembly (calling conventions, call frames, data representation, assembly ...) along with whatever hardware architecture knowledge you require.<p>Also, to get better understanding of x86 ISA I followed the old i386 manual[2]. Its old but much more smaller. Perhaps once you feel comfortable, you can move to newer manuals. I never read newer ones (because I never actually needed assembly for any project, was just studying for fun).<p>[1] <a href="http:&#x2F;&#x2F;www.amazon.com&#x2F;Computer-Systems-Programmers-Perspective-Edition&#x2F;dp&#x2F;0136108040" rel="nofollow">http:&#x2F;&#x2F;www.amazon.com&#x2F;Computer-Systems-Programmers-Perspecti...</a><p>[2] <a href="http:&#x2F;&#x2F;css.csail.mit.edu&#x2F;6.858&#x2F;2015&#x2F;readings&#x2F;i386.pdf" rel="nofollow">http:&#x2F;&#x2F;css.csail.mit.edu&#x2F;6.858&#x2F;2015&#x2F;readings&#x2F;i386.pdf</a>