Jeff's Home Page
Contrapositive Diary
Jeff's SF


 

     

It's still in print (since May 2000) and available: The second edition—or maybe the third, depending on how you count—of what may be the only genuine beginners' text on Intel assembly language ever written. It's in most stores and on Amazon, and although I may not be the most objective commentator, I don't think there's anything like it anywhere. This book (or its two predecessors, see below) have been in print continuously since mid-1989. You can order it through Amazon by clicking on the cover image at left.

The idea behind the book, nutty as it might seem, is to teach assembly language as your first programming language. No previous programming experience required. When I first wrote the book, I thought it was a reach, but 125,000 copies and countless fan letters later, I guess it actually worked.

How does it work? I started at the beginning, and explained what computers are and what they do. Assembly language must take the hardware into account (at least as far as memory addressing is concerned) so I talk about hardware. And when I finally get down to teaching assembly language itself, the emphasis is on memory addressing. In assembly language, if you know where your operands are, you're three quarters of the way to anywhere else you might want to be.

This is a radically different approach from most "intro" assembly books, which begin by teaching you the MOV instruction, and then perhaps the ADD instruction, with little or no discussion of the context in which assembly language operates. This is dumb. Instructions are probably 35% of the trick in assembly language. 50% is memory addressing, and the remaining 15% is odds'n'ends.

The big win in the second edition is that there's Nothing Else to Buy. Everything you need is on the CD: A masterful free assembler called NASM, and a DOS text-mode development environment from which to work, including a text editor. This environment, called NASM-IDE, replaces my ancient JED environment, which was described in the first edition. For Linux work, you can use any of the many Linux console editors/environments like vi or EMACS. I describe EMACS, as it's my personal favorite, but it's your choice. Because DOS no longer comes with a linker, I also provide a free linker, ALINK.

By the way, all of this software is freeware, and even if you don't buy my book, you can download it without charge from the links I've gathered below, in the "Assembly Language Downloads" section. It may be a good idea to download the software from the Web anyway, because the CDs in the book were burned in 2000 and newer versions are now available.

Buy the Book Online

By the way, if you ever run across a signed copy of either of the first two editions, it's not rare. Back when we were selling my book through ads in PC Techniques and Visual Developer Magazine, I was signing every copy that went out the door, so literally hundreds have my autograph.

Hints for Running the Example Code

Although I don't much care for Windows XP, I have an XP lab machine and have tested NASM-IDE and NASM16.EXE on it. Works fine, and you don't have to boot into DOS mode or anything. (There is no DOS mode, really. DOS is truly dead, and has been stuffed and mounted on XP's wall, as a block of APIs.) You have to open a console window and navigate to the directory where NASM-IDE and NASM are located, and work within the console window as though it were DOS. XP will also open a console window if you double-click on NASM-IDE.EXE. Rob Anderton has a nice Java-based Windows version of NASM-IDE, and I suspect I will move to that with the next edition.

You may run into an obscure error the first time you try assembling any code under NASM-IDE. It's SPAWNO error code 2. This error happens when NASM-IDE doesn't have the full path of the assembler stored in its Options|Assembler screen. This full path must contain the name of the assembler file (typically NASM16.EXE) in it. The path to the directory is not enough. For example you must have something like this: C:\assembly\nasmide\nasm16.exe You may choose to arrange your directories in some other fashion, and whatever you choose is OK...as long as you tell NASM-IDE where everything is. Enter directories for include files and for the output directory in Options|Directories.

A related SPAWNO error happens when NASM itself can't find its log file. Make sure there's a file named NASM.LOG in the directory where the assembler resides. If not, create an empty text file called NASM.LOG and put it there. The SPAWNO errors are errors that turn up when NASM-IDE "spawns" a process by invoking NASM. They basically mean that NASM can't run for some reason. The most common causes are that there's no full path to the assembler (including the assembler executable's name) as mentioned above, or that the log file is missing.

Errata for the Second Edition

• A fair number of people have written to say that they've been unable to run NASM-IDE after copying it from the book's CD and then lowering all the Read Only bits. (See the next errata item for more details on the Read-Only bit issue.) When they attempt to run NASM-IDE, they get an error message on the order of "Unable to initialise file." I'm not really sure what the problem is, but the solution is simple: Don't use the copy of NASM-IDE on the CD at all! Download NASM-IDE from the link on this page, below in my "Assembly Language Downloads" section. Use that copy. Leave the other one on the CD. Something's wrong with it, so let it pass, and use the one here. It's free and it does all the same things.

• This isn't exactly an error, except of omission: I forgot to tell you guys to turn off the read-only bit on the files you transfer over from the CD! All files stored on CD-ROM have their Read-Only bit set. This bit is not automatically cleared when you copy the file to a hard disk using Windows Explorer or DOS COPY. If you don't clear it, you'll have problems with any file that must be written to, including both example program source files and program log and INI files, etc. This will cause peculiar problems, especially with NASM-IDE, and it's no fault of NASM-IDE's. The easy way to do this is to multiple-highlight the files you copied from the CD after they're on your hard drive and then right click to the Properties context menu item. Un-check the Read-Only attribute check box. All files that were highlighted will have their Read-Only bits cleared. And it should be obvious, but note that you can't run the software off the CD-ROM.

• Another problem with the CD, noticed by many people, is that some text files are missing: sam.txt, oldsam.txt, and moose.txt. You can download these files (plus all the rest of them) from my site: http://www.copperwood.com/pub/.

• Page 19, Figure 2.1. Martian is an acquired taste, but I didn't make it any easier here by muffing the column captions. I'll post the whole corrected figure here once I fix my scanner (it's correct in the first edition, sigh) but I can describe the captions for you. From right to left, over the columns, it should be:

# of Foos
# of Foobies
# of Foobities
# of Foobidities
# of Foobididities

Thanks to Jeff Mansfield, who first brought it to my attention. Sorry for the messup. This chapter was a bitch to get right with the technical artist, copyeditors, etc.

• Page 31, under the heading From Decimal to Hex, last sentence in the third paragraph: "The next largest power of 16—512—is obviously too large to be present in 449." Although it's true that 512 is obviously too large to be present in 449, the next largest power of 16 after 256 is not 512 but 4096. Please replace "512" with "4096," and thanks to Willem Brown for spotting it.

• Another "first catch" for Willem Brown is on Page 43, in the list of numbered steps. Several exponents were demoted to ordinary numbers during the typesetting process, and I missed 'em: 2^3Two to the third power (which is hard to express in HTML) came out as "23;" two to the fourth power came out as "24;" two to the sixth power came out as "26," and so on. The text there makes no sense as it is.

• Page 69, first paragraph, second line, typo: "the fireman's pockets" should be "the foreman's pockets." (Maybe that Pentium should be water-cooled...) Thanks to Andy De Paoli for spotting this one.

• Page 129, under the heading Moving Around the Edit Window, third paragraph under the heading: "There are numerous other cursor movement keys that you can use within JED." Replace JED with NASM-IDE. That's what I get for "repurposing content." Thanks again to Andy De Paoli.

• Page 153, very last paragraph: "The colloquial '64K' is shorthand for the number 66,536." Obviously, 66,536 should be 65,536. Don't know how that one snuck in. Again, thanks to Andy De Paoli, as for the above two.

• Page 325, in the code for Byte2Str: The third line in the actual procedure has a typo in the comment. It reads "Load offset of Digits into DI" when in fact it should say "Load offset of Digits into BX." The code is correct. Thanks to Corey Vavrik for spotting that one.

• Page 344, under the heading "The Phantoms of the Opcodes": In "TEST AX,3 ; 3 in binary is 00001000B" both of the "3" digits should be "8"s. Bit 3 of a binary number has the value 8, but the late-night blearies made me switch it around. Thanks to Jack Higbie for spotting this one.

• Pages 351 and 365, in the comment header for the Display Adapter Information Lookup Table. What I say is a 26-character string is actually a 27-character string. Many thanks to a sharp-eyed reader named Brian who did not pass along his last name.

• Finally, many people have pointed out that the ASCII table mentioned in several places in the book (supposedly present in Appendix D) simply isn't anywhere to be found. I'll try and get one into a subsequent printing. It's not like I don't have one here anywhere...

The History of My Assembly Language Books

In late 1987, acquisitions editor Amy Davis of Scott, Foresman & Co. asked me if there was room in the market for a series of books on PC assembly language. I wasn't sure but the more I thought about it the more I wanted to give it a shot. I had done some assembly for nearly all machines I had ever owned; first an RCA COSMAC system based on the Elf from Popular Electronics (I added 2560 bytes of RAM—an immense amount of memory to wire-wrap by hand in 1976) and then my first 8080 machine, a Big Box With Toggle Switches. (Ithaca Intersystems—anybody remember them? I eventually gave the machine gratis to the San Jose School District.) Assembly had always been a bit of a struggle, and I pondered if there was a way to make it easier, and get beginners into assembly with less bloodshed and hair loss than I myself had suffered.

I thought, well, we could use three books for starters: A beginner book, and intermediate text, and a wizard's grimoire. I would write the beginner book, and figured that if I could pull it off, I could do damned near anything. I approached the most astonishing Michael Abrash about the grimoire, him being the leading assembly language wizard for the PC, back then and probably throughout all the ages to come. Amy brought me a pair of authors for the intermediate text, Bill Murray and Chris Pappas. My book would be called Assembly Language From Square One. Chris and Bill were to write Assembly Language Magic. Michael's book was to be Zen of Assembly Language.

We all got to work. I sketched out what I wanted, tossed proposals back and forth with my co-conspirators, and got all three books under contract. Michael objected at first that he wasn't sure there was enough of his wizard's insight to make a book out of. My intuition said otherwise, and the eventual result eight years later (Michael Abrash's Graphics Programming Black Book) was about three inches thick, and the largest single book ever published by Coriolis Group Books. True, some of that was C programming, but the bulk of it was and is assembly material.

The books came off pretty well. I wrote my own and edited the other two. We worked all through 1988 and into 1989, and eventually all three books were published, mine in mid-1989 and the other two in very late 1989 and early 1990. I don't like the paper they were printed on, which tears too easily and is yellowing badly now, fifteen years later, but that wasn't the worst problem we had. In late 1989, Scott, Foresman's trade book like was acquired by monster publishing conglomerate Harper Collins. They didn't much want to be in trade publishing, and had purchased Scott, Foresman for their highly-regarded textbook business. They canned the whole trade line in early 1990, after our little series had been out for only a little while. So as good as Zen of Assembly Language was (and it is legendary) back in 1990 you just couldn't get it.

This drove me nuts. I worked hard to get rights back for the books, but it took awhile, and for reasons that only a big publisher would understand, I had to agree to change the title of my book before republishing it with another house. (This has to do with retailer returns.) So when I took the book to John Wiley & Sons in 1991, they jumped on it—and republished it in 1992 as Assembly Language Step By Step, which was a series they had going at the time. Wiley didn't want to republish Zen, and Michael was ambivalent about it as well, since it really didn't cover the more advanced processors which had come to rule by 1992 or so. He eventually wrote much additional material in his columns in PC Techniques and Dr. Dobb's Journal, which was gathered into Zen of Code Optimization, published by Coriolis Group Books in early 1994. Zen of Code Optimization was really Zen of Assembly Language, Part 2—but it had some C code in it as well, and we wanted the title to reflect that fact. Later on, we put the text and scanned figures of Zen of Assembly Language on the CD ROM for Michael Abrash's Graphics Programming Black Book, and if you can find that book (which is now out of print, alas) you'll have Zen as well.

What if anything Bill and Chris did with their book after rights reverted, I never really knew.

Wiley's Assembly Language Step By Step was a huge success—it blew the doors off all my earlier Turbo Pascal books rolled together. Wiley intended to keep it in print as long as it sold, and it continued to sell...and sell...and sell. Every couple of years they asked me if I wanted to revise it, and I quailed a little at the thought. What I wanted to do, come 1996 or so, was add material for the Linux operating system, which was becoming a force at that time.That was a big job, since I didn't know a lot about Unix and would have to learn it deep. I finally got down to work toward the end of 1998, and worked on it for most of a year. The revised and enlarged second edition finally appeared in May 2000.

I've lost track of Amy Davis, but Michael Abrash remains a close and treasured friend, and I run into Bill and Chris regularly at trade shows. I've written books that I've enjoyed more—The New Delphi 2 Programming Explorer being probably the most fun of anything I've ever done sitting down—but I doubt I've learned more writing anything else.

Will there be a third edition? I'm hoping, but Wiley hasn't shown much interest so far. I'll let you know in this space if anything turns up on that front. I'd like to drop DOS specifics, add coverage for Windows console apps, and do more with Linux, including how to make kernel calls and instructions on writing 80 X 25 text mode apps with ncurses. The problem is that the book can't grow very much anymore. It's already as large, page-count wise, as the publisher is willing to go. If I add new material I'll have to pull something out to make room, and that will be a difficult decision.

Other Assembly Language Books

Probably the single most commonly asked question I get on assembly is: "After I'm done with your book, what book do I use to go on from there?" The answer (like the answer to most questions) is: Depends. Depends on what else you want to do. Because after you get done with my intro to assembly, assembly (like most computer disciplines) begins to specialize. With that in mind, let me recommend a few titles here. One problem I have is that many of my favorite assembly language books are no longer in print, so it's kind of pointless to recommend them to you if it's going to drive you nuts looking for them. As best I know, the titles shown below are still available new, and I provide links to take you write to their order pages on Amazon. You can also search for any of these books on the major used-book sites like ABE Books and Amazon's used-book service Bibliofind. If a book on Intel assembly is currently in print and not listed here, that means I've looked it over and don't recommend it for some reason. Useful books on assembly are scarce—and I won't recommend useless ones simply because good ones are hard to find.

Mastering Turbo Assembler, Second Edition by Tom Swan. (Sams Publishing, 1995. ISBN 0-672-30526-7) 900 pages. $45 US

Click to buy it on Amazon! Tom's book is the classic intermediate-level assembly text for DOS assembly working using Borland's Turbo Assembler (TASM.) It's a bruiser of a book (900 pages) that has a couple of intro chapters, but it goes considerably farther than mine for DOS and has an introductory chapter on assembly programming for Windows. It also discusses (in some detail) assembly language interface to both Pascal and C++. It covers disk file handling from assembly and the creation of DOS TSR (Terminate, Stay Resident) utilities. Tom's writing style is superb, and there's lots of code examples. The only caution I have is that the chapter on Windows assembly will barely get you started, but if you're going down that (scary) road, it's a good way to begin. Note that you need TASM to follow the examples. Click to order this book from Amazon.

Macro Magic with Turbo Assembler by Jim Mischel (John Wiley & Sons, 1992. ISBN 0-471-57815-0) 350 pages. $39.95 US

Click to buy it on Amazon!Full disclosure: I edited this book...but I also believe in it. It's the only text ever published devoted entirely to the use of macros in x86 assembly. Macros are a mechanism allowing code re-use in assembly work, and they foster a philosophy of "define once, use everywhere" that gives you the programmer another defense against both duplication of effort and the bugs that come of writing the same sequence of assembly instructions over and over again, which is dumb. The chapter on "Little Languages" explains how you can use macros to create your own "mini programming languages" to make specific tasks easier. The book is clearly written, with a touch of humor and a practical slant. The book covers DOS only. Again, you need TASM (not a free product) to assemble the examples. Click to order this book from Amazon.

Inner Loops by Rick Booth (Addison Wesley, 1996. ISBN0-201-47960-5) 364 pages. $39.95 US

Click to buy it on Amazon!It's dangerous to attempt to optimize your code before you understand assembly language thoroughly, but once you have a grip on the basics, you need to know what will buy you execution speed and what won't. Rick Booth's book is the only book on x86 optimization that I know is still in print, and while I wish it were twice as long, it's excellent. The book is not new (1996) and thus covers only Pentium and Pentium II issues, but what he describes still holds and needs to be learned. You'll learn the dynamic and interrelated nature of instruction timing, cache effects, memory alignment, and many other things. He points out some pitfalls of thinking in C while you're coding in assembly, and has some coverage of the MMX instructions that I've seen in no other book. Deep stuff, but definitely worth having. Click to order this book from Amazon.

The Revolutionary Guide to Assembly Language by Maljugin et. al. (Wrox Press, 1993. ISBN 1-874416-12-5) 986 pages. $39.95 US

Click to buy it on Amazon!This intermediate-to-advanced text has its uses, but the writing is not the best. Its focus is DOS and MASM, and it contains an immense amount of detailed information about assembly language access to the disk system, keyboard, and video. Good chapter on creating TSRs, and nice coverage of memory models. Like all DOS-focused books, its usefuleness is eroding (it was published in 1993) but there are still things in here you won't find in other books, and I refer to it regularly. Grab Tom Swan's book first, especially if you're working in TASM. This book will serve as an intermediate text if you're using MASM, but the gap between intro and intermediate here is broader. Click to order this book from Amazon.

The Embedded PC's ISA Bus: Firmware, Gadgets, and Practical Tricks by Ed Nisely (Peer to Peer, 1997. ISBN 1-57398-017-X) 344 pages. $39.95 US

Click to buy it on Amazon!Finally, I include a book that isn't exclusively devoted to assembly, but it's about embedded systems work using Intel x86 systems, something of interest to a lot of guys like me who got started with electronics and hardware and (in some cases) computers built chip-by-ship, by hand. Ed Nisely is a terrific writer, and the book covers the ISA bus, the electronics, and how to write code in both C and assembly to use the PC architecture in embedded work like dedicated controllers. There are several chapters on interfacing an embedded PC to an LCD display. Fun book, completely unique, though I need to reiterate: It's more about the electronics of embedded PC controllers than about assembly language or coding of any stripe. Not generally found in bookstores. Click to order this book from Amazon.

Assembly Language Downloads

File Size Description
NASM (all versions)   I used to host NASM here, but now that the project has moved to SourceForge and is evolving rapidly, I think it's best for you to download all NASM files from the project's home page. The book's code was written using NASM 0.98, but the examples are simple enough so that changes in the assembler shouldn't require changes in the source code from the book.
NASM-IDE 231 KB Robert Anderton's great free NASM editor/environment for DOS.
ALINK 183 KB Tony Williams' great free linker for DOS, version 1.6.
LNK563.EXE 280 KB Microsoft now makes its venerable linker, LINK.EXE, available without cost. This used to come with DOS and Windows but no longer does, and if you prefer it to ALINK, you can now get it without any fuss or money. LNK563.EXE is a self-extracting zip, containing LINK and some other stuff.
DOSCODE.ZIP 23 KB This is the code for the DOS examples in Assembly Language Step By Step, Second Edition. No Linux code is included in this file; all of that is in a separate archive, see the next item, LINUXCODE.ZIP..
LINUXCODE.ZIP 67 KB This is the code for the Linux examples (including makefiles) in Assembly Language Step By Step, Second Edition. No DOS code is included in this file. See the previous archive, DOSCODE.ZIP.
JED.ZIP 116 KB This file is only for those using Assembly Language from Square One or Assembly Language Step By Step, First Edition. DOS only. It contains the code listings for the two earlier books, along with my JED editor/environment.

ASMENV.ZIP

138 KB This is a more advanced DOS editor/environment, inspired by JED but much more sophisticated. Written by Gene Fowler, a good friend of mine, in Borland Pascal 7 Turbo Vision.
My Downloads Folder   This is a quick link to my downloads folder on copperwood.com. Note that my current hosting service does not offer anonymous ftp access to files, so you'll have to use a Web browser to see what's there and bring down what you need.

Assembly Language Links

Randy Hyde's WEBster

Randy Hyde has emerged as the guru in matters of assembly language on the Web. WEBster is his Web server, and it serves as a jumping off place for all of his various initiatives, many of which involve assembly language. These are so important that I'm breaking out several of the most significant as separate links in this compendium, even though everything is reachable through WEBster.

The Art of Assembly Language, by Randy Hyde

A 1500-page intermediate-to-advanced assembly language programming textbook, dating to 1996 but updated regularly. Free, and available either online as a (large) passel of HTML files, or downloadable as an even larger Adobe Acrobat (PDF) file. Brilliantly done, somewhat academic, and not as "intro level" as some practitioners believe, but still a superb piece of work that belongs on every assembly programmer's hard disk. Focuses on MASM rather than NASM, but the principles still apply. Don't miss it!

Randy Hyde's High-Level Assembly Language (HLA)

I'm of two minds about "high-level" assembly (HLA). I used such a hybrid (called DACL) to write a lot of production code back in my Xerox days, and while it was marvelously fast and compact (sheesh, it had to support up to four simultaneous users of a single 32K, 1 Mhz 8080 system!) it had lost most of the flavor of assembly, and (worse) didn't teach me much about the underlying machine. With that caveat, I do want to endorse Randy's treatment of the concept, which is very well done and (as you might expect) exquisitely documented. Using HLA feels like writing assembly code mixed with simple Pascal or (especially) C code, and you can create very small, very fast programs very quickly. To get a sense for what HLA is about, read this first. To see a piece of good HLA code, click here. Definitely take a look and give it a try. It's not for everybody, but it definitely works and works very well. An assembly variant with exception handling! Woo-hoo!

UCR's Standard Assembly Language Library for DOS

Another of Randy Hyde's projects hosted on his WEBster server. A large (over 200 routines) library of DOS utility functions in MASM syntax, which can easily be translated to NASM once you have your NASM wings. I found the string handling stuff very useful, and it's all beautifully written and easy to read. People writing comm programs may also appreciate the serial port code. The link above is to the documentation page; downloading the library itself is done through a link in the page. NOTE: Don't use the V2.0 library linked to in the page. As the authors indicate, it's incomplete and buggy. Use 1.0 only.

Assembly Language Style Guidelines

The last of Randy's projects that I'll link to here is his large and intriguing work on assembly language coding style. The goal is to learn how to write readable assembly code with MASM, but most of the principles apply to any assembler (including NASM, as long as you're sensitive to some of NASM's philosphical differences) and some apply to programming in general. The link above is for the HTML version; you can also get a PDF file here. My only reservation here is that this is not for beginners, and will be a rough go until you've established some assembly smarts, and by then you may have internalized some bad habits. A good entry level meltdown and re-presentation of this material would be a very good thing to have.

Assembly Programming Journal

Quarterly electronic magazine for assembly topics, distributed via email every three months. Signup is free. Back issues are archived at this site, and there is some additional Web-only content, including a very nice links page, message boards, "programming challenges" and other stuff. Covers all the common x86 assemblers and platforms. As Torry says, "Just well done."

AtoI Utility

Small (50K) download for a utility that converts AT&T assembly syntax (that is, for gas, the "native" Linux assembler) to the more familiar Intel syntax. It can convert the .s files produced by gcc into Intel mnemonics so that you can read them more easily. Comes with source so you can recompile it for Linux, or with a DOS executable that runs under DPMI. Not quite done; some of the math coprocessor instructions are not supported as of this writing. (2/29/2000)

DDJ Microprocessor Center

Very slick, content-rich site from the gang at Dr. Dobb's Journal. Unbelievable collection of undocumented CPU wisdom of interest to assembly code fetishists. Microprocessor news too. Much of what I know about Crusoe came from here. This site does not bend the knee to beginners, so be prepared for some head-banging if you're not completely comfortable in the assembly world.

Get MASM for Free

I don't care for MASM and haven't used it for a good long while (basically since I picked up TASM, and certainly not since I went to NASM) but I learned recently that you can download MASM for free, and free is not a bad price for the creature. Getting MASM is not as simple as downloading a single ZIP or an install suite, so this link is to a page that explains it all and provides a table of download links for all the different files you might need. There's a lot of code drifting around the NET for MASM, so having it on your hard disk isn't a bad thing, even if you do most of your original work (as I do) in NASM.

RADASM (A visual IDE for assembly work)

VASM has gone away, and its mantle is being taken up by RADASM, a Win32 IDE for assembly work that has a lot of promise. I haven't done much with it yet but will begin poking at it before I start serious work on the Third Edition.

The Int80 Page

German site that focuses on the Linux INT 80 interface to the kernel. Very arcane stuff, documented almost nowhere else, the goal of which is to program in assembly without having to call into clib all the time. (I teach clib calls in my book--ya gotta walk before ya run!) Keep in mind that calling the kernel directly makes your code kernel-version dependent. On the other hand, doing this stuff is probably the best way I could suggest for becoming a Linux kernel expert!

Jan's Linux & Assembler (x86) Home Page

Poor Jan apologizes for his "flintstone English" but whatever his actual nationality, his English isn't bad and I learned a great deal here. This is a new URL that replaces the one I published in Assembly Language Step By Step, Second Edition. Lots of example source code for both NASM and gas, including a demo of how to use the ncurses text screen library and SVGAlib.

Linux Assembly

Russian site, spearheaded by Konstantin Boldyshev and Dragan Stancevic. All x86 so far, though they are asking for assembly info for Linux under other processors, and will post it once they find it. Interestingly, they have a link that will allow you to download the entire site as one file. Lots of code, but the real win here are the tutorials, of which there are many, and the links, which include everything I've ever found. Probably the most content-rich Linux assembly site ever. Plan to spend more than a few hours here—or just download the whole site!

The V2 Operating System

This is wild: A protected mode, open-source operating system for Intel 386 and beyond, written entirely in assembly language...and taking up 42K. 42,000 bytes. Eek! But hey, if you want to learn operating system theory and assembly at the same time, this is a much easier run than trying to swallow the Linux kernel whole. Lots of fun. Give it a shot, just to experience an operating system smaller than your typical animated GIF. Boots from a floppy.

Steve Gibson's Assembly Language Windows Applications

For those who must face the Beast, here's a good starting point. Steve knows his stuff and has been around forever, and if he says something works, I'd lay odds that it works. However, I don't know (and don't have time to learn) much about Windows work in assembly, so I can't help you much beyond pointing you here.

Assembly Language Newsgroups

Most people have forgotten Usenet in this age of the all-powerful Web, but there are a fair number of Usenet newsgroups devoted to X86 assembly language, and while there's lots of unrelated chatter among the regular characters (including a number of running in-jokes) but I've found the groups well worth monitoring.

comp.lang.asm.x86

This is the best, and if you only monitor one newsgroup, monitor this one. Randy Hyde hangs out here a lot, and a great deal of useful information can be gleaned from the back-and-forth.

alt.lang.asm

This group gets more traffic on a daily basis than comp.lang.asm.x86, but it's not as focused on x86 work, and the noise level seems higher, including what is (for me) an infuriating tendency for people to go off on political rants.

alt.os.assembly

Usually pretty sparse, but worth subscribing to and checking periodically.

Assembly language is also discussed in newsgroups with more specific focus, like game programming or virus technology, and there are some interesting things in alt.hacker. But the three groups listed above are where you'll find the most concentrated trove of assembly traffic. Don't forget that Google will now search newsgroups, and you can search for assembly topics in other groups through Google. Look for the "Google Groups" link on the main page.