Computing Reviews
Today's Issue Hot Topics Search Browse Recommended My Account Log In
Review Help
Search
Microsoft’s 80386/80486 programming guide (2nd ed.)
Nelson R., Microsoft Press, Redmond, WA, 1991. Type: Book (9781556153433)
Date Reviewed: Sep 1 1993
Comparative Review

The most immediate mode of communication with a CPU is by means of its assembly language. Even though fewer and fewer major applications are written entirely in assembler, the need for well-crafted programs and routines in assembler remains when speed and low memory usage are the dominant criteria. In addition, understanding how operating systems, device handlers, and compilers perform their tasks requires a thorough understanding of assembly language.

The Intel 80x86 family of microprocessors comprises the CPUs found in the most successful group of microcomputers. The commercial success of the 80x86 family, the application software written for it, and programming languages and tools motivate the study of the architecture and assembly languages of this series of chips. A small, steady stream of books on the 80x86 family has been appearing since the first PCs entered the market. Some have been reference books, some are intended for self-study, and others are meant for formal classroom instruction. One of the major challenges faced by teachers of 80x86 assembly language and their students and by authors of texts is the complexity of the Intel assembly languages. Even the old 8086/88 chip has a large number of instructions, special-purpose general registers, many addressing modes, and other features that are augmented by later additions to the family. It is easy to get lost in the details. It is not uncommon to study a simpler assembly language (IBM 360/370) instead of 80x86 assembler even when most other programming is done on PCs. Better books help teachers and students organize the wealth of information so that 80x86 assembly language programming can become an integral part of the curriculum.

Table 1: Quantitative Data
NelsonKindredThorneGiles
Pages of text160368606740
Pages of appendices306978040
Number of chapters7142318
Number of exercisesNone206 quiz questions, 36 exercises, 27 lab problems230 quiz questions, 235 exercises276 exercises
Average number of exercises per chapterNone15 quiz questions, 10 exercises, 2 lab problems10 quiz questions, 10 exercises15 exercises
Answers to exercisesNAYesNoneNone
Floppy diskNoneFrom publisherFrom publisherIncluded
Instructor’s manualNAFrom publisherFrom publisherNone
AudienceExperienced programmersCollege classCollege classCollege class

Nelson

Nelson’s book is different from the other three in that it is not a textbook. It is primarily a monograph discussing the architectural features of the 80386/80486 series of microprocessors that permit memory protection and the various modes in which programs may execute--real, protected, and virtual 86. The author includes no discussion on 8086/88 architecture and only as much of the 80286 as is needed to show the evolution of the 80386 and 80486.

The title of the book is a misnomer. It is not a “programming guide.” The reader expecting examples of code illustrating the capabilities provided by the architecture of the 80386 and 80486 will be disappointed. It is, however, one of the more extensive discussions of 80386 architecture that one can find in a bookstore, and it would be a suitable addition to a supplemental reading list in a computer organization course.

Approximately two-thirds of the book is devoted to reference material and appendices. A complete listing of 80x86 assembler instructions includes the entire range of CPUs from the 8086 through the 80486, including the math coprocessors. One instruction is presented per page in an attractive, readable format. Other appendices include opcode tables, instruction timing data, instruction formats, and disassembler tables (which could be extremely useful).

This book supplements the user’s manuals for Microsoft Assembler, and it should be placed right next to the software manuals.

Kindred

Kindred’s text is the shortest book in this group. 8086/88 assembler is discussed almost exclusively. 80286 and 80386 instructions and features are absent except for their inclusion in the instruction reference section. The composition of the appendices and reference sections is puzzling. On the one hand, MS-DOS commands are included, but this material may be redundant. By the time students are ready to study assembler, they probably have had a couple of semesters’ experience using MS-DOS while programming in a high-level language. On the other hand, the reference information on assembler instructions is too condensed to be useful, especially for first-time students of assembler. Nothing is said about 80x87 codes in the text or the appendices.

Kindred includes a good chapter on mixed-language programming involving assembler and Pascal, FORTRAN, BASIC, and C. The book concludes with a chapter on video memory and graphics (CGA) as the only example of programming for devices.

This is the only textbook in this review that includes answers to exercises. The exercises, which appear at the ends of chapters, are of three kinds: “questions” are purely descriptive, “exercises” require writing short segments of code, and “lab problems” require more extensive programming. The text probably contains too few lab problems--often only one or two per chapter. The instructor will need to supplement the lab problems.

The examples in the text are well chosen and readable. A floppy disk containing source code for the example programs is available from the publisher, as are an instructor’s manual and test bank.

Kindred’s book is probably best suited for first-time students of assembler after a year of Pascal or Modula-2. It would not be a good choice as a reference.

Table 2: Coverage of Topics
NelsonKindredThorneGiles
8086/88NoYesYesYes
80286 and 80386YesNoWeakYes
80x87YesNoNoYes
ArchitectureStrongWeakModerateModerate
Interlanguage communicationNoYesNoYes
Device driversNoModerateStrongStrong
MacrosNoLateLateEarly
External subroutinesNoEarlyLateEarly
Protected modeYesNoNoYes

Thorne

Thorne’s book is much more oriented to assembly language than to computer organization. Like Kindred’s text, it focuses almost exclusively on 8086/88 programming, with the exception of a brief chapter on 80286 and 80386 processors at the very end of the book. The chapters are broken into sections. Exercises are given after each section rather than postponed to the end of the chapter. They seem to be more demanding as well as more numerous than those in  Kindred’s  book. At the end of each chapter, the author gives a ten-question self-check quiz.

No answers are provided in the back of the book. Three major extended examples (a calculator simulator, a text editor, and a business application) are used as the basis of text discussions, however, and they are listed in their entirety in three appendices. A floppy disk containing examples from the text and an instructor’s manual are available from the publisher.

The use of Microsoft Assembler (MASM) and Codeview is discussed in the text. This information may be handy for students who do not have copies of the software. Some of this information may become obsolete, however, as software releases improve and augment the user interface. For instance, MASM 6.0 uses the Programmer’s Work Bench, which eliminates the need for much command-line  processing. 

Thorne introduces external routines and macros rather late--300 and 450 pages into the book, respectively. Programming the 80x87 coprocessors is absent from the discussion. It is surprising to discover that the discussion also omits interlanguage communications. The discussion of device drivers is much more extensive than Kindred’s. In addition to text and CGA display, keyboard interrupts and both parallel and asynchronous serial I/O ports are discussed in separate chapters. The language reference section is a substantial improvement over Kindred’s, but it is still rather terse.

Thorne’s text is intended for first-time assembler programming students. Because it covers more topics and discusses them in more depth, teachers will have more flexibility in arranging the curriculum and in assigning problems and exercises from the text. Because it lacks discussion of the 80286 and later CPUs, this book would not be a good choice as a reference.

Giles

Although Giles begins with an emphasis on programming 8086/88 processors, his text alone comes to grips with the problem of integrating the other members of the 80x86 family into the discussion. The programming of the 80286 and 80386 CPUs is brought in throughout the text after a topic has been introduced and examples using 8086 assembler have been presented and analyzed. Entire chapters are devoted to the special features of the 80286 and 80386 microprocessors. Giles presents enough material right away so that the student can work on interesting problems and later develop both breadth and depth. Macros and external subroutines and creating and using libraries containing them are introduced early in the text and developed later on. MASM and Codeview are presented early, as in Thorne’s text. Again, the rapid development of software tends to make discussions of the use of a particular release of a language product somewhat dated by the time a book enters the market.

Like Thorne, Giles breaks chapters into sections, and each section is completed by a selection of exercises and problems. Giles provides more exercises than any of the other authors. Many of the exercises are system utility programs (for example, generate a listing of a text file with line numbers, or generate a hexadecimal dump of the contents of an EXE file with addresses). Answers to the exercises are not given, nor is there any mention of an instructor’s manual. This text is the only one of the four that comes with a floppy disk, however; the disk contains all the source code examples in the text, libraries, and programming templates. The inclusion of the floppy disk makes the Giles text the most suitable for self-study. The disk is a 360K floppy, but the files are compressed and expand to much more than the nominal size of the disk.

Giles goes into the most detail about the MS-DOS environment. Interrupt processing, device drivers, memory-resident programs, and interfacing with other languages are discussed thoroughly. This book is unique among the texts in this review in that it includes chapters with coding  examples  devoted to the 80x87 floating-point coprocessors and to protected mode programming. It is the only book discussed here that could serve as a reference once the course in which it is used is finished.

Comparison

The four books that are the subjects of this review treat the assembly language of the 80x86 family. One of them, however--Nelson’s--is clearly different from the others in that it is not a textbook. The books by Kindred, Thorne, and Giles are textbooks intended for the college classroom.

Since millions of PCs and PC compatibles are in daily use, the best place to begin teaching Intel 80x86 assembler seems to be the 8086/88 level. Many colleges and universities have a hodgepodge of equipment, because holdings of computers are augmented and rarely totally replaced. Students likewise will have computers from various sources: sometimes hand-me-downs like the old PC-XT will go off to college while the family upgrades the computer at home. Because of this range of computers, 8086/88 assembler is still relevant. Commercial products are sold every day that can run on every platform from the old PC to the latest 80486 number cruncher. The fact that a textbook does not discuss the 80286 or 80386 microprocessor is not a major flaw; after all, the 8086/88 instruction set is upwardly compatible.

Selecting a text requires careful consideration of the students who will be using it. Students in a systems-oriented or scientific programming track would profit most from the Giles text because of its comprehensiveness. The later members of the 80x86 family, the math coprocessors, and protected mode programming are likely to be part of their studies. The Giles text would most likely be used for more than one semester of fairly intense instruction and would serve as a reference after the classwork is completed.

The Thorne and Kindred texts would be more suitable for the student who has not identified a professional interest. In an introductory assembler course, either would be satisfactory. Some may prefer Thorne because of the larger selection of exercises and extended examples. Others may prefer Kindred because of its brevity and pedagogical features.

Reviewer:  Anthony J. Duben Review #: CR116663
Comparative Review
This review compares the following items:
  • Microsoft’s 80386/80486 programming guide (2nd ed.):
  • Computer organization and assembly language programming for IBM PCs and compatibles (2nd ed.):
  • Assembly language programming for the Intel 80XXX family:
  • Structured assembler language for IBM microcomputers:
  • Bookmark and Share
      Featured Reviewer  
     
    Intel 80386 (C.5.3 ... )
     
     
    Intel Assembly Language (D.3.2 ... )
     
     
    Instruction Set Interpretation (B.1.5 ... )
     
     
    Intel 80486 (C.5.3 ... )
     
     
    Intel 8086 (C.5.3 ... )
     
     
    Intel 8088 (C.5.3 ... )
     
      more  
    Would you recommend this review?
    yes
    no
    Other reviews under "Intel 80386": Date
    80x86 Assembly programming
    Jones D., Oxford University Press, Inc., New York, NY, 1991. Type: Book (9780198538295)
    Sep 1 1992
    Assembly language for engineers
    Moylan P., Halsted Press, New York, NY, 1987. Type: Book (9789780470209080)
    Mar 1 1989
    Assembly language programming: 8086/8088, 8087
    Mayer J., John Wiley & Sons, Inc., New York, NY, 1988. Type: Book (9789780471605041)
    Nov 1 1989
    more...

    E-Mail This Printer-Friendly
    Send Your Comments
    Contact Us
    Reproduction in whole or in part without permission is prohibited.   Copyright 1999-2024 ThinkLoud®
    Terms of Use
    | Privacy Policy