| Preface | v |
Chapter 1 | Representing Data in a Computer | 1 |
1.1 | Binary and Hexadecimal Numbers | 2 |
1.2 | Character Codes | 6 |
1.3 | 2's Complement Representation for Signed Integers | 9 |
1.4 | Addition and Subtraction of 2's Complement Numbers | 15 |
1.5 | Other Systems for Representing Numbers | 21 |
| Chapter Summary | 25 |
Chapter 2 | Parts of a Computer System | 27 |
2.1 | PC Hardware: Memory | 28 |
2.2 | PC Hardware: The CPU | 30 |
2.3 | PC Hardware: Input/Output Devices | 36 |
2.4 | PC Software | 37 |
| PC Software: The Operating System | 37 |
| PC Software: Text Editors | 38 |
| PC Software: Language Translators and the Linker | 38 |
| Chapter Summary | 39 |
Chapter 3 | Elements of Assembly Language | 41 |
3.1 | Assembly Language Statements | 42 |
3.2 | A Complete Example | 45 |
3.3 | How to Assemble, Link, and Run a Program | 53 |
3.4 | The Assembler Listing File | 60 |
3.5 | Constant Operands | 68 |
3.6 | Instruction Operands | 73 |
3.7 | Input/Output Using Macros Defined in IO.H | 77 |
| Chapter Summary | 82 |
Chapter 4 | Basic Instructions | 85 |
4.1 | Copying Data | 86 |
4.2 | Integer Addition and Subtraction Instructions | 95 |
4.3 | Multiplication Instructions | 108 |
4.4 | Division Instructions | 118 |
4.5 | Addition and Subtraction of Larger Numbers | 130 |
4.6 | Something Extra: Levels of Abstraction and Microcode | 133 |
| Chapter Summary | 134 |
Chapter 5 | Branching and Looping | 137 |
5.1 | Unconditional Jumps | 138 |
5.2 | Conditional Jumps, Compare Instructions, and if Structures | 144 |
5.3 | Implementing Loop Structures | 159 |
5.4 | For Loops in Assembly Language | 173 |
5.5 | Arrays | 180 |
5.6 | Something Extra: Pipelining | 189 |
| Chapter Summary | 190 |
Chapter 6 | Procedures | 193 |
6.1 | The 80x86 Stack | 194 |
6.2 | Procedure Body, Call and Return | 201 |
6.3 | Parameters and Local Variables | 211 |
6.4 | Recursion | 223 |
6.5 | Other Architectures: Procedures Without a Stack | 228 |
| Chapter Summary | 230 |
Chapter 7 | String Operations | 231 |
7.1 | Using String Instructions | 232 |
7.2 | Repeat Prefixes and More String Instructions | 239 |
7.3 | Character Translation | 254 |
7.4 | Converting a 2's Complement Integer to an ASCII String | 259 |
7.5 | Other Architectures: CISC versus RISC Designs | 264 |
| Chapter Summary | 265 |
Chapter 8 | Bit Manipulation | 267 |
8.1 | Logical Operations | 268 |
8.2 | Shift and Rotate Instructions | 278 |
8.3 | Converting an ASCII String to a 2's Complement Integer | 292 |
8.4 | The Hardware Level--Logic Gates | 298 |
| Chapter Summary | 299 |
Chapter 9 | The Assembly Process | 301 |
9.1 | Two-Pass and One-Pass Assembly | 302 |
9.2 | 80x86 Instruction Coding | 307 |
9.3 | Macro Definition and Expansion | 319 |
9.4 | Conditional Assembly | 326 |
9.5 | Macros in IO.H | 333 |
| Chapter Summary | 337 |
Chapter 10 | Floating-Point Arithmetic | 339 |
10.1 | 80x86 Floating-Point Architecture | 340 |
10.2 | Programming with Floating-Point Instructions | 359 |
10.3 | Floating-Point Emulation | 374 |
10.4 | Floating-Point and In-line Assembly | 384 |
| Chapter Summary | 386 |
Chapter 11 | Decimal Arithmetic | 387 |
11.1 | Packed BCD Representations | 388 |
11.2 | Packed BCD Instructions | 396 |
11.3 | Unpacked BCD Representations and Instructions | 404 |
11.4 | Other Architectures: VAX Packed Decimal Instructions | 416 |
| Chapter Summary | 417 |
Chapter 12 | Input/Output | 419 |
12.1 | Console I/O Using the Kernel32 Library | 420 |
12.2 | Sequential File I/O Using the Kernel32 Library | 428 |
12.3 | Lower-Level Input/Output | 437 |
| Chapter Summary | 439 |
Appendix A | Hexadecimal/ASCII Conversion | 441 |
Appendix B | Useful MS-DOS Commands | 443 |
Appendix C | MASM 6.11 Reserved Words | 445 |
Appendix D | 80x86 Instructions (by Mnemonic) | 449 |
Appendix E | 80x86 Instructions (by Opcode) | 469 |
| Index | 489 |