Scott/Jones · Scott/Jones · Scott/Jones · Scott/Jones · Scott/Jones · Scott/Jones · Scott/Jones · Scott/Jones

Home | Textbook Catalog | Order Book | Syllabi


New copies of Assembly Language include a compiler at no cost to students!

Please note: It is illegal to make duplicates of this compiler or any copyrighted material.

Save 12% over most
bookstore prices by ordering
directly from Scott/Jones!

Third Edition

William Jones
Professor of Computer Science,
California State University Dominguez Hills

Visit the textbook Web site.
Jones is characterized by introduction of topics motivated by pedagogy and student need rather than the simple desire to list everything related together.
  1. For example: Arrays
    Arrays are delayed as long as reasonably possible. Then they are treated extremely carefully and completely with many examples. Jones also treats the difference between 'subscript' and 'pointer' processing of arrays which is essential to understanding array processing in C/C++. Competitors tend to introduce it early and give it minor coverage allowing students to sink or swim on their own).
  2. For example: Segments
    As in arrays, Jones delays as long as reasonably possible. (You don't really start needing to talk about segments until you must , in order to get command line input.) Competitors: Most mention segment registers in Chaper 1, long before the student has the background to understand them.
  3. For example: Programming Problems
    Problems in Jones are realistic, completely specified, TESTED programming problems.
Competitors often have no programming problems at all. When they do they, are often incompletely specified and it is difficult to separate the easy ones from the difficult ones.

NEW in 3rd Edition
Coverage of 32 bit instructions and registers from the beginning OPTIONAL material added on interfacing with Windows VGA is now covered in an appendix OPTIONAL discussion of C++ internals, particularly how polymorphy is accomplished.

"I have been using Jones' Assembly Language for seven years straight and I have never even considered changing to another textbook. Through his personable style, Bill Jones has made many good friends among my students."
—Laszlo Szuecs, Fort Lewis College

"I am Roy Louis L. Garcia of Hartnell College, Salinas California. I am a sophomore student in this community college. I just want to thank you for your wonderful book, Assembly Language For The IBM PC Family. Thank you."
—Roy Louis L. Garcia, student

"I have been using Bill Jones' "Assembly Language for the IBM PC Family" for over three years now. I feel that the concepts are introduced in the proper order and to an appropriate depth, and the students love the textbook, which is the real test!"
—Tom Gillman, College of the Desert

Table of Contents

Chapter 1: Preliminaries
1.1 Hardware Overview
       1.1.1 Level I: General Properties of Personal Computers
       1.1.2 Level II: IBM PC Hardware
       1.1.3 More on Memory (Optional)

1.2 The Decimal, Binary, and Hexadecimal Numbering Systems
       1.2.1 The Binary Number System
       1.2.2 Conversions between Binary and Decimal
       1.2.3 The Hexadecimal Number System
       1.2.4 Conversions Involving Hexadecimal
       1.2.5 Addition in Binary and Hex

1.3 Negative Numbers; 2's Complement Arithmetic
       1.3.1 Sign-Magnitude Representation
       1.3.2 1's Complement Representation
       1.3.3 2's Complement Representation

1.4 The ASCII Character Set
1.5 Pseudo-Code

Chapter 2: Assembler Overview
2.1 Creating an Assembly Language Program
2.2 Structure of an IBM PC Assembly Language Program
       2.2.1 Global Program Structure
       2.2.2 The .STACK Segment
       2.2.3 The .DATA Segment
       2.2.4 The .CODE Segment

Chapter 3: More on I/O
3.1 Macros for I/O
3.2 The DOS Display Character Call
3.3 Magic Numbers
3.4 Numeric I/O

Chapter 4: Arithmetic
4.1 Addition and Subtraction
4.2 Multiplication and Division
4.3 Comments on Comments
4.4 A Little Something Extra: Timing of Instructions (completely new)
4.5 Internal Format of Instructions (Optional)

Debug Workshop I: Introduction to Debuggers

Chapter 5: Comparing and Branching
5.1 Decision-making in Assembly Language
5.2 Unsigned Conditional Jumps
5.3 Arithmetic and the Flags
5.4 Counting Loops (important revision)
5.5 Reading Single Characters
5.6 Loop Case Studies
5.7 Some Technical Details on Compares and Jumps
5.8 Timing of Instructions, Continued.

Debug Workshop II: Debugging with Breakpoints

Chapter 6: Subprograms
6.1 Writing Subprograms
6.2 The Stack
6.3 The Stack, call, and ret
6.4 Separately Translated Subprograms
6.5 Creating Program Libraries (Optional)
6.6 How the Linker Works (Optional)

Debug Workshop III: Procedures

Chapter 7: Applying Assembly I: Numeric I/O
7.1 PutDec I: Displaying Unsigned Numbers
7.2 PutDec II: Turning PutUDec into PutDec
7.3 GetDec I: Reading a Number from the Keyboard

Chapter 8: Writing Macros and Program Testing
8.1 Writing Simple Macros
       8.1.1 Macro Declarations
       8.1.2 Macro Expansion
       8.1.3 Parameter Parentheses
       8.1.4 Local Symbols
       8.1.5 Parameter Separator (&)
       8.1.6 Assembly Listings

8.2 An Extended Example: Programming Testing
8.3 Pseudo-Macros for Repetition

Chapter 9: Bit Operations
9.1 Boolean Operations
9.2 Shift Operations (substantial revision)
9.3 An Application-Code to Implement PutHex
9.4 A Little Something Extra: Bit Instructions in High Level Languages
9.5 Assembler RECORD Structures (Optional)

Chapter 10 Arrays
10.1 Addressing
       10.1.1 Memory Address versus Memory Contents
       10.1.2 Address Arithmetic
       10.1.3 Types of Address Expressions
       10.1.4 Rules for Address Expressions
       10.1.5 Byte Swapping
       10.1.6 Byte Swapping and Address Arithmetic (Optional)

10.2 Arrays
       10.2.1 Arrays in General
       10.2.2 Using Arrays

10.3 Reading a Whole Line from the Keyboard
10.4 A Little Something Extra: Indexing with Extended Registers (new in this position)
10.5 Arrays in High-Level Languages (Optional)

Debug Workshop IV: Arrays and Byte Swapping

Chapter 11: Applying Assembly II: Array Applications
11.1 Conversion Tables
11.2 Sets (Substantially rewritten)
       11.2.1 Representing Sets as Arrays
       11.2.2 Searching Sets
       11.2.3 An Application: The Sieve of Eratosthenes

11.3 PutDec III: Bin2Dec
11.4 C/C++/Java Variable Length Character Strings (completely new)
11.5 C/C++ switch and Pascal case Statements

Chapter 12: Segments
12.1 Segments and Offsets
12.2 Segment Registers
12.3 Defining Segments (important new material)
12.4 The ASSUME Statement
12.5 The Program Segment Prefix (PSP)
12.6 A Little Something Extra: The Real Time Clock and Program Timing (mostly new)
12.7 A Little Something Extra: Pointers
12.8 A Little Something Extra: Memory Models (new material)

Debug Workshop V: Segments

Chapter 13: Procedures and High Level Languages
13.1 Procedures and the Stack (includes new material)
13.2 A Little Something Extra: Assembler Help with Procedures (includes new material)
13.3 A Little Something Extra: CPU Assistance with Procedures
13.4 A Little Something Extra: Reference Parameters (includes new material)
13.5 A Little Something Extra: Other C++ Features (all new)
       13.5.1 Default Parameter values
       13.5.2 Overloaded Functions
       13.5.3 Polymorphic Calling of Virtual Functions

13.6 A Little Something Extra: Embedding Assembly in a High Level Language

Chapter 14: Applying Assembly III: Multiple Precision and Decimal Arithmetic
14.1 Operations for Multiple Precision
14.2 Working with Multiple Precision Numbers
14.3 Random Numbers (substantially revised)
14.4 Decimal Arithmetic

Chapter 15: Interrupts
15.1 Generalities about Interrupts
15.2 Interrupt Processing on the 80X86
15.3 Applications: Timing Operations and Debuggers
       15.3.1 The Real Time Clock
       15.3.2 Interrupts and Debuggers

15.4 Interrupt Handlers
15.5 A Little Something Extra: A TSR Program
15.6 A Little Something Extra: Simultaneously Executing Programs
       15.6.1 Race Conditions
       15.6.2 Semaphores: an Abstract Method of Synchronization
       15.6.3 Using Semaphores to Solve Race Conditions
       15.6.4 Implementing Semaphores to Solve Race Conditions

15.7 A Short History of Interrupts

Chapter 16: Conditional Assembly and More on Macros
16.1 Generally Applicable IFs
16.2 IFs Usable Only in Macros (includes new material)

Chapter 17: String Processing Instructions
17.1 The String Operations (includes new material)
17.2 The REP Instruction Prefix

Chapter 18: File Processing
18.1 Handles and Opening, Creating, and Closing Files
18.2 Basic File Operations
18.3 Random File Accessing
       18.3.1 The _LSeek Macro
       18.3.2 Applications of _LSeek I: LOG, a Message Logger
       18.3.3 Applications of _LSeek II: Tail, and End of File Displayer (revised)
       18.3.4 Writing the _LSeek Macro

18.4 A Little Something Extra: Redirecting stderr (includes new material)
18.5 The Utility Routines ParseCmd, CCheck, and WCheck (revised)

Chapter 19: Floating Point
19.1 FPU Data
       19.1.1 Floating Point Numbers
       19.1.2 Integers
       19.1.3 BCD Numbers

19.2 Form of Floating Point Instructions
19.3 The FPU Stack
19.4 Floating Point Arithmetic
19.5 Floating Point I/O
19.6 FPU Comparing and Branching
19.7 Transcendental Functions and the FPU
19.8 The FPU and the Debugger

Chapter 20: Applying Assembly IV: Windows 32 Bit Programming (entirely new)
(Actual chapter contents may vary)
20.1 32 Bit Console Applications
20.2 Simple Windows Programs in Assembly
20.3 Graphics Programming

Answers to Selected Exercises
Appendix A: The IBM Extended Character Set
Appendix B: 80X86 Instructions
Appendix C: DOS in Windows (entirely new)
Appendix D: Selected DOS and BIOS Functions, Formats, and Memory Locations
Appendix E: Debugger Summary
Appendix F: How Assemblers Work

720 pages
ISBN 1-57676-058-8

Home | Textbook Catalog | Order Book | Syllabi

Scott/Jones Inc., El Granada CA
Website maintenance & updating by
Jane Scott/Jones.
January 16, 2004