- Shopping Bag ( 0 items )
Praised by experts for its clarity and topical breadth, this visually appealing text provides an easy-to-understand, systematic approach to teaching the fundamentals of 80x86 assembly language programming and PC architecture. It offers readers a fun, hands-on learning experience and reinforces concepts with numerous examples and review questions. It uses the Debug utility to show what action the instruction performs, and then provides a sample program to show its application. The text delves into architecture, supporting chips, buses, interfacing techniques, system programming, hard disk characteristics, and more.
The fourth edition:
PREFACE TO VOLUMES I AND II Purpose
This combined volume is intended for use in college-level courses in which both Assembly language programming and 80x86 PC interfacing are discussed. It not only builds the foundation of Assembly language programming, but also provides a comprehensive treatment of 80x86 PC design and interfacing for students in engineering and computer science disciplines. This volume is intended for those who wish to gain an in-depth understanding of the internal working of the IBM PC, PS, and 80x86 compatible computers. It builds a foundation for the design and interfacing of microprocessor-based systems using the real-world example of the 80x86 IBM PC. In addition, it can also be used by practicing technicians, hardware engineers, computer scientists, and hobbyists who want to do PC interfacing and data acquisition. Prerequisites
Readers should have a minimal familiarity with the IBM PC and the DOS operating system in addition to having had an introductory digital course. Knowledge of other programming languages would be helpful, but is not necessary.
Although a vast majority of current PCs use 386, 486, or Pentium microprocessors, their design is based on the IBM PC/AT, an 80286 microprocessor system introduced in 1984. A good portion of PC/AT features, hence its limitations, are based on the original IBM PC, an 8088 microprocessor system, introduced in 1981. In other words, one cannot expect to understand fully the architectural philosophy of the 80x86 PC and its expansion slot signals unless the 80286 PC/AT and its subset, the IBM PC/XT, are first understood. For this reason, we describe the 8088 and 80286 microprocessors inChapter 9. Contents of Volume I
A systematic, step-by-step approach has been used in covering various aspects of Assembly language programming. Many examples and sample programs are given to clarify concepts and provide students an opportunity to learn by doing. Review questions are provided at the end of each section to reinforce the main points of the section. We feel that one of the functions of a textbook is to familiarize the student with terminology used in technical literature and in industry, so we have followed that guideline in this text.
Chapter 0 covers concepts in number systems (binary, decimal, and hex) and computer architecture. Most students will have learned these concepts in previous courses, but Chapter 0 provides a quick overview for those students who have not learned these concepts, or who may need to refresh their memory.
Chapter 1 provides a brief history of the evolution of x86 microprocessors and an overview of the internal workings of the 8086 as a basis of all x86 processors. Chapter 1 should be used in conjunction with Appendix A (a tutorial introduction to DEBUG) so that the student can experiment with concepts being learned on the PC. The order of topics in Appendix A has been designed to correspond to the order of topics presented in Chapter 1. Thus, the student can begin programming with DEBUG without having to learn how to use an assembler.
Chapter 2 explains the use of assemblers to create programs. Although the programs in the book were developed and tested with Microsoft's MASM assembler, any Intel-compatible assembler such as Borland's TASM may be used.
Chapter 3 introduces the bulk of the logic and arithmetic instructions for unsigned numbers, plus bitwise operations in C.
Chapter 4 introduces DOS and BIOS interrupts. Programs in Assembly and C allow the student to get input from the keyboard and send output to the monitor. In addition, interrupt programming in C is described, as well as how to put Assembly language code in C programs.
Chapter 5 describes how to use macros to develop Assembly language programs in a more time-efficient and structured manner. We also cover INT 33H mouse function calls and mouse programming.
Chapter 6 covers arithmetic and logic instructions for signed numbers as well as string processing instructions.
Chapter 7 discusses modular programming and how to develop larger Assembly language programs by breaking them into smaller modules to be coded and tested separately. In addition, linking Assembly language modules with C programs is thoroughly explained.
Chapter 8 introduces some 32-bit concepts of 80386 and 80486 programming. Although this book emphasizes 16-bit programming, the 386/486 is introduced to help the student appreciate the power of 32-bit CPUs. Several programs are run across the 80x86 family to show the dramatic improvement in clock cycles with the newer CPUs. Contents of Volume II
Chapter 9 describes the 8088 and 286 microprocessors and supporting chips in detail and shows how they are used in the original IBM PC/XT/AT. In addition, the origin and function of the address, data, and control signals of the ISA expansion slot are described.
Chapter 10 provides an introduction to various types of RAM and ROM memories, their interfacing to the microprocessor, the memory map of the 80x86 PC, the timing issue in interfacing memory to the ISA bus, and the checksum byte and parity bit techniques of ensuring data integrity in RAM and ROM.
Chapter 11 is dedicated to the interfacing of I/O ports, the use of IN and OUT instructions in the 80x86, and interfacing and programming of the 8255 programmable peripheral chip. We describe I/O programming in several languages, as well.
Chapter 12 covers the PC Interface Trainer and Bus Extender, which are used to interface PCs to devices for data acquisition such as LCDs, stepper motors, ADC, DAC, and sensors.
Chapter 13 discusses the use of the 8253/54 timer chip in the 80x86 PC, as well as how to generate music and time delays.
Chapter 14 is dedicated to the explanation of hardware and software interrupts, the use of the 8259 interrupt controller, the origin and assignment of IRQ signals on the expansion slots of the ISA bus, and exception interrupts in 80x86 microprocessors.
Chapter 15 is dedicated to direct memory access (DMA) concepts, the use of the 8237 DMA chip in the 80x86 PC, and DMA channels and associated signals on the ISA bus.
Chapter 16 covers the basics of video monitors and various video modes and adapters of the PC, in addition to the memory requirements of various video boards in graphics mode.
Chapter 17 discusses serial communication principles, the interfacing and programming of National Semiconductor's 8250/16450/16550 DART chip, Intel's 8251 USART chip, and verifying data integrity using the CRC method.
Chapter 18 covers the interfacing and programming of the keyboard in the 80x86 PC, in addition to printer port interfacing and programming. In addition, a discussion of various types of parallel ports such as EPP and ECP is included.
Chapter 19 discusses both floppy and hard disk storage organization and terminology. We also show how to write Assembly language programs to access files using INT 21 H DOS function calls.
Chapter 20 examines the 80x87 math coprocessor, its programming and interfacing, and IEEE single and double precision floating point data types.
Chapter 21 explores the programming and hardware of the 386 microprocessor, contrasts and explains real and protected modes, and discusses the implementation of virtual memory.
Chapter 22 is dedicated to the interfacing of high-speed memories and describes various types of DRAM, including EDO and SDRAM, and examines cache memory and various cache organizations and terminology in detail.
In Chapter 23 we describe the main features of the 486, Pentium and Pentium Pro and compare these microprocessors with the RISC processors. Chapter 23 also provides a discussion of MMX technology and how to write programs to detect which CPU a PC has.
Chapter 24 describes the MS DOS structure and the role of CON FIG.SYS and batch files in the 80x86 PC, the writing of TSR (terminate and stay resident) programs and device drivers.
Chapter 25 explains 80x86 PC memory terminology, such as conventional memory, expanded memory, upper memory block, high memory area, as well as MS DOS memory management.
Chapter 26 provides an overview of the IC technology including the recent advances in the IC fabrication, describes IC interfacing and system design issues, and covers error detection and correction.
Chapter 27 is dedicated to the discussion of the various types of PC buses, such as ISA, EISA, USB, their performance comparisons, the local bus and features of the PCI local bus.
In Chapter 28 we show how to use C language to access DOS function calls, BIOS interrupts, memory, input/output ports, and CMOS RAM of the 80x86. Appendices
The appendices have been designed to provide all reference material required for the topics covered in this combined volume so that no additional references should be necessary.
Appendix A provides a tutorial introduction to DEBUG. Appendix B provides a listing of Intel's 8086 instruction set along with clock cycles for 80x86 microprocessors. Appendix C describes assembler directives with examples of their use. Appendix D lists some commonly used DOS 21 H function calls and INT 33H mouse functions. Appendix E lists the function calls for various BIOS interrupts. Appendix F provides a table ofd-1SCII codes. Appendix G lists the I/O map of 80x86-based ISA computers. Appendix H provides a description of the BIOS data area. Appendix I contains data sheets for various IC chips. Lab Manual
The lab manual for this series is available on the following web site:
|Preface to Volumes I and II|
|Introduction to Computing||1|
|Ch. 1||The 80x86 Microprocessor||18|
|Ch. 2||Assembly Language Programming||49|
|Ch. 3||Arithmetic and Logic Instructions and Programs||82|
|Ch. 4||BIOS and DOS Programming in Assembly and C||121|
|Ch. 5||Macros and the Mouse||150|
|Ch. 6||Signed Numbers, Strings, and Tables||173|
|Ch. 7||Modules; Modular and C Programming||193|
|Ch. 8||32-Bit Programming for 386 and 486 Machines||220|
|Ch. 9||8088, 80286 Microprocessors and ISA Bus||235|
|Ch. 10||Memory and Memory Interfacing||265|
|Ch. 11||I/O and the 8255; ISA Bus Interfacing||309|
|Ch. 12||Interfacing to the PC: LCD, Motor, ADC, and Sensor||351|
|Ch. 13||8253/54 Timer and Music||386|
|Ch. 14||Interrupts and the 8259 Chip||410|
|Ch. 15||Direct Memory Accessing; the 8237 DMA Chip||447|
|Ch. 16||Video and Video Adapters||477|
|Ch. 17||Serial Data Communication and the 16450/8250/51 Chips||508|
|Ch. 18||Keyboard and Printer Interfacing||541|
|Ch. 19||Floppy Disks, Hard Disks, and Files||570|
|Ch. 20||The 80x87 Math Coprocessor||600|
|Ch. 21||386 Microprocessor: Real vs. Protected Mode||631|
|Ch. 22||High-Speed Memory Interfacing and Cache||659|
|Ch. 23||486, Pentium, Pentium Pro and MMX||690|
|Ch. 24||MS DOS Structure, TSR, and Device Drivers||724|
|Ch. 25||MS DOS Memory Management||740|
|Ch. 26||IC Technology and System Design Considerations||759|
|Ch. 27||ISA, EISA, MCA, Local, and PCI Bus||784|
|Ch. 28||Programming DOS, BIOS, Hardware with C/C++||808|
|App. A||Debug Programming||825|
|App. B||80x86 Instructions and Timing||847|
|App. C||Assembler Directives and Naming Rules||883|
|App. D||DOS Interrupt 21H and 33H Listing||898|
|App. E||BIOS Interrupts||924|
|App. F||ASCII Codes||940|
|App. G||I/O Address Maps||941|
|App. H||IBM PC/PS BIOS Data Area||952|
|App. I||Data Sheets||959|