University computer science courses usually include several
classes on computer architecture and assembly language programming
within the first two years of undergraduate course work.
Effective programming often depends on your familiarity with
various hardware designs or, at least, your ability to assimilate
them readily.
Abstract discussions of computer architecture just aren't enough,
since there is nothing quite as good at teaching and deepening
these concepts as genuine hands-on work.
So actual assembly programming is an indespensible part of
learning about computer architecture.
Self Education
There's a very long road ahead of those serious about educating
themselves beyond the immediate needs of a particular project.
And this is especially true in learning about computer
architectures, their machine codes, various assembly languages,
compilers and optimizers, operating systems and concurrent
programming.
For example, the IBM PC architecture has grown from a
relatively simple design, with the PC running at 4.77MHz.
Computers were often shipped with only 64Kb of RAM and one
floppy drive.
The 8088 CPU exposed its local bus directly onto the system's
attachment bus (later to be standardized and called the ISA
bus.)
Today's Penium Pro family of computers have as many transistors
in their support chipset as the CPU, itself.
These systems include at least two levels of caching systems,
support for several types of DRAM memory systems, a local
CPU bus designed to smoothly handle up to four CPUs together,
a reflection mode PCI bus, an AGP bus for video, the standard
ISA bus and associated bridge chips, sophisticated interrupt
controllers to manage both PCI and ISA bus interrupts, a
specialized APIC bus that provides support for multiple CPUs,
and support for memory holes and spaces for compatibility.
It's a bewildering complexity, partly born from compatibility
needs and partly from performance and, of course, always from
Intel's desire to make big profits.
Each piece of good documentation is hard to come by and probably
outdated.
And when the documentation is kept current (as Intel's
manuals tend to be), it is a reference rather than a teaching
tool.
Worse, folks who really know this stuff well are hard to come
by, too, and no one is likely to spoon feed you.
I hope these pages are a small help to some.