This book studies the programming language of one of the more widely used microprocessor families: the Intel 8086/8088 and its coprocessors. The author assumes that the reader is familiar with elements of computer programming. A clear, logical explanation of concepts and techniques and more than 50 programs and examples make it suitable for independent study or with minimal assistance from an instructor. It could also be used as a reference book.
This book differs from others devoted to the subject. A variety of topics are introduced in a detailed, easy-to-follow manner that is suitable for a motivated beginner yet is still interesting for an experienced programmer. To reinforce the reader’s understanding, almost every chapter ends with a summary, a list of keywords, and a collection of exercises that enable the student to apply the material covered.
The book consists of 22 chapters organized in 5 sections. Section 1 reviews the basic concepts of microprocessor architecture (the Intel 8088 chip, registers, and encoding of instructions) and the MS-DOS operating system (components and interrupt routines).
Section 2 shows how to write an assembly program and prepare it for execution. An example is provided. General rules for writing a program, 8088 instructions, assembly directives, macros, procedures, program segmentation, and the use of stack and indexed addressing are described. Assembling and linking processes are also covered, as are MASM, LINK, and EXE2BIN utility programs.
Section 3 deals with interfacing between a program and MS-DOS. The .COM and .EXE files are discussed to show how the operating system passes control to a program and regains it. Special attention is devoted to the program segment prefix (PSP) concept. The DEBUG utility is used to demonstrate program execution. The important issue of changing interrupts with position-independent code is analyzed.
Section 4 covers the 8088 instructions for data management (entry, processing, and display). A modular approach to program design and coding is considered here with respect to passing data from the calling program to procedures. Arithmetical operations on integers in various formats (binary, hexadecimal, BCD, and ASCII) are discussed.
Section 5 addresses miscellaneous topics, such as file access methods, advanced use of assembly directives to structure programs, alteration of interrupt routines, and interfacing assembly language routines with software in other languages (e.g., Turbo Pascal and dBASE III). The last two chapters in this section introduce the principal concepts of video graphics, the architecture of the 8087 numeric processor, and its coupling with the 8088.
There are five appendices. Appendix A lists most of the currently available editors, assemblers, linkers, and debuggers. Appendix B presents the 8086/8088 and 8087 instruction set, divided into functional groups. Appendix C lists the most common assembler directives. Appendix D provides selected interrupt routines with selected kernel functions. Appendix E is an annotated bibliography. Finally, there is a six-page index.
Although the topics presented in this book receive excellent treatment, a few general comments seem warranted. A glossary of terms would be a valuable addition to the book. It would allow the editor to decrease the size of Section 1 and cut some pages from other sections. An appendix containing solutions or hints to the exercises would increase the potential readership. In summary, this book is a welcome addition to the literature on assembly language programming.