Maybe Perzold, Code: The Hidden Language of Computer Hardware and Software, or Nisan & Schicken, The Elements of Computing Systems: Building a Modern Computer from First Principles?
Haven't actually read them, but those two are quite often recommended.
When I was first starting my BTEC, I found the John Bird books helpful.
I'd recommend Computer Systems: A Programmer's Perspective (currently reading it) and the course based on the book.
That book is not available for free. You can get it from Amazon though.