Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
Assembly Language for x86 Processors
Sixth Edition
KIP R. IRVINE
Florida International University School of Computing and Information Sciences
Upper Saddle River Boston Columbus San Francisco New York Indianapolis London Toronto Sydney Singapore Tokyo Montreal
Dubai Madrid Hong Kong Mexico City Munich Paris Amsterdam Cape Town
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
Vice President and Editorial Director, ECS: Marcia J. Horton Editor-in-Chief: Michael Hirsch Executive Editor: Tracy Dunkelberger Assistant Editor: Melinda Haggerty Editorial Assistant: Allison Michael Vice President, Production: Vince O’Brien Senior Managing Editor: Scott Disanno Production Liaison: Jane Bonnell Production Editor: Maheswari PonSaravanan, TexTech International Senior Operations Supervisor: Alan Fischer Marketing Manager: Erin Davis Marketing Assistant: Mack Patterson Art Director: Kenny Beck Cover Designer: Laura C. Ierardi Cover Image: Color enhanced x-ray of nautilus shell / Bert Myers / Science Photo Library Art Editor: Greg Dulles Media Editor: Daniel Sandin Media Project Manager: Danielle Leone Composition/Full-Service Project Management: TexTech International
IA-32, Pentium, i486, Intel64, Celeron, and Intel 386 are trademarks of Intel Corporation. Athlon, Phenom, and Opteron are trademarks of Advanced Micro Devices. TASM and Turbo Debugger are trademarks of Borland International. Microsoft Assembler (MASM), Windows Vista, Windows 7, Windows NT, Windows Me, Windows 95, Windows 98, Windows 2000, Windows XP, MS-Windows, PowerPoint, Win32, DEBUG, WinDbg, MS-DOS, Visual Studio, Visual C++, and CodeView are registered trademarks of Microsoft Corporation. Autocad is a trademark of Autodesk. Java is a trademark of Sun Microsystems. PartitionMagic is a trademark of Symantec. All other trademarks or product names are the property of their respective owners.
Copyright © 2011, 2007, 2003, 1999 by Pearson Education, Inc., Upper Saddle River, New Jersey 07458.
All rights reserved. Manufactured in the United States of America. This publication is protected by Copyright and permissions should be obtained from the publisher prior to any prohibited reproduction, storage in a retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording, or likewise. To obtain permission(s) to use materials from this work, please submit a written request to Pearson Higher Education, Permissions Department, 1 Lake Street, Upper Saddle River, NJ 07458.
Previously published as
Assembly Language for Intel-Based Computers.
The author and publisher of this book have used their best efforts in preparing this book. These efforts include the development, research, and testing of the theories and programs to determine their effectiveness. The author and pub- lisher make no warranty of any kind, expressed or implied, with regard to these programs or the documentation contained in this book. The author and publisher shall not be liable in any event for incidental or consequential damages in connection with, or arising out of, the furnishing, performance, or use of these programs.
Library of Congress Cataloging-in-Publication Data
Irvine, Kip R. Assembly language for x86 processors / Kip R. Irvine. -- 6th ed.
p. cm. Rev. ed. of: Assembly language for intel-based computers, 5th ed., 2007. ISBN 0-13-602212-X (alk. paper)
1. IBM microcomputers--Programming. 2. Assembler language (Computer program language) I. Irvine, Kip R. - Assembly language for intel-based computers. II. Title.
QA76.8.I77 2011 005.265--dc22 2009049014
ISBN-13: 978-0-13-602212-1
ISBN-10: 0-13-602212-X
10 9 8 7 6 5 4 3 2 1
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
To Jack and Candy Irvine
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
This page intentionally left blank
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
v
Contents
Preface xix
1
Basic Concepts 1
1.1 Welcome to Assembly Language 1
1.1.1 Good Questions to Ask 2 1.1.2 Assembly Language Applications 5 1.1.3 Section Review 6
1.2 Virtual Machine Concept 7
1.2.1 Section Review 9
1.3 Data Representation 9
1.3.1 Binary Integers 9 1.3.2 Binary Addition 11 1.3.3 Integer Storage Sizes 12 1.3.4 Hexadecimal Integers 13 1.3.5 Signed Integers 15 1.3.6 Character Storage 17 1.3.7 Section Review 19
1.4 Boolean Operations 22
1.4.1 Truth Tables for Boolean Functions 24 1.4.2 Section Review 26
1.5 Chapter Summary 26
1.6 Exercises 27
1.6.1 Programming Tasks 27 1.6.2 Nonprogramming Tasks 27
2
x86 Processor Architecture 29
2.1 General Concepts 29
2.1.1 Basic Microcomputer Design 30 2.1.2 Instruction Execution Cycle 31 2.1.3 Reading from Memory 33 2.1.4 How Programs Run 34 2.1.5 Section Review 35
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
vi Contents
2.2 x86 Architecture Details 36
2.2.1 Modes of Operation 36 2.2.2 Basic Execution Environment 36 2.2.3 Floating-Point Unit 39 2.2.4 Overview of Intel Microprocessors 39 2.2.5 Section Review 42
2.3 x86 Memory Management 43
2.3.1 Real-Address Mode 43 2.3.2 Protected Mode 45 2.3.3 Section Review 47
2.4 Components of a Typical x86 Computer 48
2.4.1 Motherboard 48 2.4.2 Video Output 50 2.4.3 Memory 50 2.4.4 Input-Output Ports and Device Interfaces 50 2.4.5 Section Review 52
2.5 Input-Output System 52
2.5.1 Levels of I/O Access 52 2.5.2 Section Review 55
2.6 Chapter Summary 55
2.7 Chapter Exercises 57
3
Assembly Language Fundamentals 58
3.1 Basic Elements of Assembly Language 58
3.1.1 Integer Constants 59 3.1.2 Integer Expressions 60 3.1.3 Real Number Constants 61 3.1.4 Character Constants 61 3.1.5 String Constants 61 3.1.6 Reserved Words 62 3.1.7 Identifiers 62 3.1.8 Directives 62 3.1.9 Instructions 63 3.1.10 The NOP (No Operation) Instruction 65 3.1.11 Section Review 66
3.2 Example: Adding and Subtracting Integers 66
3.2.1 Alternative Version of AddSub 69 3.2.2 Program Template 70 3.2.3 Section Review 70
3.3 Assembling, Linking, and Running Programs 71
3.3.1 The Assemble-Link-Execute Cycle 71 3.3.2 Section Review 77
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
Contents vii
3.4 Defining Data 77
3.4.1 Intrinsic Data Types 77 3.4.2 Data Definition Statement 77 3.4.3 Defining BYTE and SBYTE Data 78 3.4.4 Defining WORD and SWORD Data 80 3.4.5 Defining DWORD and SDWORD Data 81 3.4.6 Defining QWORD Data 81 3.4.7 Defining Packed Binary Coded Decimal (TBYTE) Data 82 3.4.8 Defining Real Number Data 83 3.4.9 Little Endian Order 83 3.4.10 Adding Variables to the AddSub Program 84 3.4.11 Declaring Uninitialized Data 85 3.4.12 Section Review 85
3.5 Symbolic Constants 86
3.5.1 Equal-Sign Directive 86 3.5.2 Calculating the Sizes of Arrays and Strings 87 3.5.3 EQU Directive 88 3.5.4 TEXTEQU Directive 89 3.5.5 Section Review 90
3.6 Real-Address Mode Programming (Optional) 90
3.6.1 Basic Changes 90
3.7 Chapter Summary 91
3.8 Programming Exercises 92
4
Data Transfers, Addressing, and Arithmetic 94
4.1 Data Transfer Instructions 94
4.1.1 Introduction 94 4.1.2 Operand Types 95 4.1.3 Direct Memory Operands 96 4.1.4 MOV Instruction 96 4.1.5 Zero/Sign Extension of Integers 98 4.1.6 LAHF and SAHF Instructions 100 4.1.7 XCHG Instruction 100 4.1.8 Direct-Offset Operands 101 4.1.9 Example Program (Moves) 102 4.1.10 Section Review 103
4.2 Addition and Subtraction 104
4.2.1 INC and DEC Instructions 104 4.2.2 ADD Instruction 104 4.2.3 SUB Instruction 105 4.2.4 NEG Instruction 105
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
viii Contents
4.2.5 Implementing Arithmetic Expressions 106 4.2.6 Flags Affected by Addition and Subtraction 106 4.2.7 Example Program (AddSub3) 110 4.2.8 Section Review 111
4.3 Data-Related Operators and Directives 112
4.3.1 OFFSET Operator 112 4.3.2 ALIGN Directive 113 4.3.3 PTR Operator 114 4.3.4 TYPE Operator 115 4.3.5 LENGTHOF Operator 115 4.3.6 SIZEOF Operator 116 4.3.7 LABEL Directive 116 4.3.8 Section Review 117
4.4 Indirect Addressing 117
4.4.1 Indirect Operands 118 4.4.2 Arrays 119 4.4.3 Indexed Operands 120 4.4.4 Pointers 121 4.4.5 Section Review 123
4.5 JMP and LOOP Instructions 124
4.5.1 JMP Instruction 124 4.5.2 LOOP Instruction 124 4.5.3 Summing an Integer Array 126 4.5.4 Copying a String 126 4.5.5 Section Review 127
4.6 Chapter Summary 128
4.7 Programming Exercises 129
5
Procedures 132
5.1 Introduction 132
5.2 Linking to an External Library 132
5.2.1 Background Information 133 5.2.2 Section Review 134
5.3 The Book’s Link Library 134
5.3.1 Overview 136 5.3.2 Individual Procedure Descriptions 137 5.3.3 Library Test Programs 149 5.3.4 Section Review 157
5.4 Stack Operations 157
5.4.1 Runtime Stack 158 5.4.2 PUSH and POP Instructions 160 5.4.3 Section Review 162
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
Contents ix
5.5 Defining and Using Procedures 163
5.5.1 PROC Directive 163 5.5.2 CALL and RET Instructions 165 5.5.3 Example: Summing an Integer Array 168 5.5.4 Flowcharts 169 5.5.5 Saving and Restoring Registers 170 5.5.6 Section Review 171
5.6 Program Design Using Procedures 172
5.6.1 Integer Summation Program (Design) 173 5.6.2 Integer Summation Implementation 175 5.6.3 Section Review 177
5.7 Chapter Summary 177
5.8 Programming Exercises 178
6
Conditional Processing 180
6.1 Introduction 180
6.2 Boolean and Comparison Instructions 181
6.2.1 The CPU Flags 182 6.2.2 AND Instruction 182 6.2.3 OR Instruction 183 6.2.4 Bit-Mapped Sets 184 6.2.5 XOR Instruction 186 6.2.6 NOT Instruction 187 6.2.7 TEST Instruction 187 6.2.8 CMP Instruction 188 6.2.9 Setting and Clearing Individual CPU Flags 189 6.2.10 Section Review 189
6.3 Conditional Jumps 190
6.3.1 Conditional Structures 190 6.3.2 J
cond
Instruction 191 6.3.3 Types of Conditional Jump Instructions 192 6.3.4 Conditional Jump Applications 195 6.3.5 Section Review 199
6.4 Conditional Loop Instructions 200
6.4.1 LOOPZ and LOOPE Instructions 200 6.4.2 LOOPNZ and LOOPNE Instructions 201 6.4.3 Section Review 201
6.5 Conditional Structures 202
6.5.1 Block-Structured IF Statements 202 6.5.2 Compound Expressions 204 6.5.3 WHILE Loops 206 6.5.4 Table-Driven Selection 208 6.5.5 Section Review 210
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
x Contents
6.6 Application: Finite-State Machines 211
6.6.1 Validating an Input String 211 6.6.2 Validating a Signed Integer 212 6.6.3 Section Review 216
6.7 Conditional Control Flow Directives 217
6.7.1 Creating IF Statements 218 6.7.2 Signed and Unsigned Comparisons 219 6.7.3 Compound Expressions 220 6.7.4 Creating Loops with .REPEAT and .WHILE 223
6.8 Chapter Summary 224
6.9 Programming Exercises 225
7
Integer Arithmetic 229
7.1 Introduction 229
7.2 Shift and Rotate Instructions 230
7.2.1 Logical Shifts and Arithmetic Shifts 230 7.2.2 SHL Instruction 231 7.2.3 SHR Instruction 232 7.2.4 SAL and SAR Instructions 233 7.2.5 ROL Instruction 234 7.2.6 ROR Instruction 235 7.2.7 RCL and RCR Instructions 235 7.2.8 Signed Overflow 236 7.2.9 SHLD/SHRD Instructions 236 7.2.10 Section Review 238
7.3 Shift and Rotate Applications 239
7.3.1 Shifting Multiple Doublewords 240 7.3.2 Binary Multiplication 241 7.3.3 Displaying Binary Bits 242 7.3.4 Isolating MS-DOS File Date Fields 242 7.3.5 Section Review 243
7.4 Multiplication and Division Instructions 243
7.4.1 MUL Instruction 243 7.4.2 IMUL Instruction 245 7.4.3 Measuring Program Execution Times 247 7.4.4 DIV Instruction 249 7.4.5 Signed Integer Division 250 7.4.6 Implementing Arithmetic Expressions 253 7.4.7 Section Review 255
7.5 Extended Addition and Subtraction 256
7.5.1 ADC Instruction 256 7.5.2 Extended Addition Example 257
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
Contents xi
7.5.3 SBB Instruction 258 7.5.4 Section Review 259
7.6 ASCII and Unpacked Decimal Arithmetic 260
7.6.1 AAA Instruction 261 7.6.2 AAS Instruction 262 7.6.3 AAM Instruction 263 7.6.4 AAD Instruction 263 7.6.5 Section Review 264
7.7 Packed Decimal Arithmetic 264
7.7.1 DAA Instruction 264 7.7.2 DAS Instruction 266 7.7.3 Section Review 266
7.8 Chapter Summary 266
7.9 Programming Exercises 267
8
Advanced Procedures 270
8.1 Introduction 270
8.2 Stack Frames 271
8.2.1 Stack Parameters 272 8.2.2 Accessing Stack Parameters 273 8.2.3 Local Variables 281 8.2.4 ENTER and LEAVE Instructions 285 8.2.5 LOCAL Directive 286 8.2.6 Section Review 289
8.3 Recursion 290
8.3.1 Recursively Calculating a Sum 291 8.3.2 Calculating a Factorial 292 8.3.3 Section Review 298
8.4 INVOKE, ADDR, PROC, and PROTO 299
8.4.1 INVOKE Directive 299 8.4.2 ADDR Operator 300 8.4.3 PROC Directive 301 8.4.4 PROTO Directive 304 8.4.5 Parameter Classifications 307 8.4.6 Example: Exchanging Two Integers 307 8.4.7 Debugging Tips 308 8.4.8 WriteStackFrame Procedure 309 8.4.9 Section Review 310
8.5 Creating Multimodule Programs 311
8.5.1 Hiding and Exporting Procedure Names 311 8.5.2 Calling External Procedures 312
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
xii Contents
8.5.3 Using Variables and Symbols across Module Boundaries 313 8.5.4 Example: ArraySum Program 314 8.5.5 Creating the Modules Using Extern 314 8.5.6 Creating the Modules Using INVOKE and PROTO 318 8.5.7 Section Review 321
8.6 Java Bytecodes 321
8.6.1 Java Virtual Machine 321 8.6.2 Instruction Set 322 8.6.3 Java Disassembly Examples 323
8.7 Chapter Summary 328
8.8 Programming Exercises 329
9
Strings and Arrays 332
9.1 Introduction 332
9.2 String Primitive Instructions 333
9.2.1 MOVSB, MOVSW, and MOVSD 334 9.2.2 CMPSB, CMPSW, and CMPSD 335 9.2.3 SCASB, SCASW, and SCASD 336 9.2.4 STOSB, STOSW, and STOSD 336 9.2.5 LODSB, LODSW, and LODSD 337 9.2.6 Section Review 337
9.3 Selected String Procedures 338
9.3.1 Str_compare Procedure 338 9.3.2 Str_length Procedure 339 9.3.3 Str_copy Procedure 340 9.3.4 Str_trim Procedure 340 9.3.5 Str_ucase Procedure 343 9.3.6 String Library Demo Program 344 9.3.7 Section Review 346
9.4 Two-Dimensional Arrays 346
9.4.1 Ordering of Rows and Columns 346 9.4.2 Base-Index Operands 347 9.4.3 Base-Index-Displacement Operands 349 9.4.4 Section Review 350
9.5 Searching and Sorting Integer Arrays 350
9.5.1 Bubble Sort 350 9.5.2 Binary Search 352 9.5.3 Section Review 359
9.6 Java Bytecodes: String Processing 359
9.7 Chapter Summary 360
9.8 Programming Exercises 361
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
Contents xiii
10
Structures and Macros 366
10.1 Structures 366
10.1.1 Defining Structures 367 10.1.2 Declaring Structure Variables 368 10.1.3 Referencing Structure Variables 370 10.1.4 Example: Displaying the System Time 372 10.1.5 Structures Containing Structures 375 10.1.6 Example: Drunkard’s Walk 375 10.1.7 Declaring and Using Unions 378 10.1.8 Section Review 381
10.2 Macros 382
10.2.1 Overview 382 10.2.2 Defining Macros 382 10.2.3 Invoking Macros 383 10.2.4 Additional Macro Features 384 10.2.5 Using the Book’s Macro Library 388 10.2.6 Example Program: Wrappers 394 10.2.7 Section Review 395
10.3 Conditional-Assembly Directives 396
10.3.1 Checking for Missing Arguments 397 10.3.2 Default Argument Initializers 398 10.3.3 Boolean Expressions 399 10.3.4 IF, ELSE, and ENDIF Directives 399 10.3.5 The IFIDN and IFIDNI Directives 400 10.3.6 Example: Summing a Matrix Row 401 10.3.7 Special Operators 404 10.3.8 Macro Functions 407 10.3.9 Section Review 409
10.4 Defining Repeat Blocks 410
10.4.1 WHILE Directive 410 10.4.2 REPEAT Directive 410 10.4.3 FOR Directive 411 10.4.4 FORC Directive 412 10.4.5 Example: Linked List 412 10.4.6 Section Review 414
10.5 Chapter Summary 415
10.6 Programming Exercises 416
11
MS-Windows Programming 419
11.1 Win32 Console Programming 419
11.1.1 Background Information 420 11.1.2 Win32 Console Functions 424 11.1.3 Displaying a Message Box 426
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
xiv Contents
11.1.4 Console Input 429 11.1.5 Console Output 435 11.1.6 Reading and Writing Files 437 11.1.7 File I/O in the Irvine32 Library 442 11.1.8 Testing the File I/O Procedures 444 11.1.9 Console Window Manipulation 447 11.1.10 Controlling the Cursor 450 11.1.11 Controlling the Text Color 451 11.1.12 Time and Date Functions 453 11.1.13 Section Review 456
11.2 Writing a Graphical Windows Application 457
11.2.1 Necessary Structures 458 11.2.2 The MessageBox Function 459 11.2.3 The WinMain Procedure 460 11.2.4 The WinProc Procedure 460 11.2.5 The ErrorHandler Procedure 461 11.2.6 Program Listing 461 11.2.7 Section Review 465
11.3 Dynamic Memory Allocation 466
11.3.1 HeapTest Programs 469 11.3.2 Section Review 473
11.4 x86 Memory Management 473
11.4.1 Linear Addresses 473 11.4.2 Page Translation 477 11.4.3 Section Review 479
11.5 Chapter Summary 479
11.6 Programming Exercises 481
12
Floating-Point Processing and Instruction Encoding 483
12.1 Floating-Point Binary Representation 483
12.1.1 IEEE Binary Floating-Point Representation 484 12.1.2 The Exponent 485 12.1.3 Normalized Binary Floating-Point Numbers 486 12.1.4 Creating the IEEE Representation 486 12.1.5 Converting Decimal Fractions to Binary Reals 488 12.1.6 Section Review 490
12.2 Floating-Point Unit 490
12.2.1 FPU Register Stack 491 12.2.2 Rounding 493 12.2.3 Floating-Point Exceptions 495 12.2.4 Floating-Point Instruction Set 495
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
Contents xv
12.2.5 Arithmetic Instructions 498 12.2.6 Comparing Floating-Point Values 502 12.2.7 Reading and Writing Floating-Point Values 504 12.2.8 Exception Synchronization 506 12.2.9 Code Examples 507 12.2.10 Mixed-Mode Arithmetic 508 12.2.11 Masking and Unmasking Exceptions 509 12.2.12 Section Review 511
12.3 x86 Instruction Encoding 512
12.3.1 Instruction Format 512 12.3.2 Single-Byte Instructions 513 12.3.3 Move Immediate to Register 514 12.3.4 Register-Mode Instructions 514 12.3.5 Processor Operand-Size Prefix 515 12.3.6 Memory-Mode Instructions 516 12.3.7 Section Review 519
12.4 Chapter Summary 520
12.5 Programming Exercises 521
13
High-Level Language Interface 525
13.1 Introduction 525
13.1.1 General Conventions 526 13.1.2 .MODEL Directive 527 13.1.3 Section Review 529
13.2 Inline Assembly Code 529
13.2.1 __asm Directive in Microsoft Visual C++ 529 13.2.2 File Encryption Example 532 13.2.3 Section Review 535
13.3 Linking to C/C++ in Protected Mode 535
13.3.1 Using Assembly Language to Optimize C++ Code 536 13.3.2 Calling C and C++ Functions 542 13.3.3 Multiplication Table Example 544 13.3.4 Calling C Library Functions 547 13.3.5 Directory Listing Program 550 13.3.6 Section Review 552
13.4 Linking to C/C++ in Real-Address Mode 552
13.4.1 Linking to Borland C++ 553 13.4.2 ReadSector Example 554 13.4.3 Example: Large Random Integers 558 13.4.4 Section Review 559
13.5 Chapter Summary 560
13.6 Programming Exercises 560
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
xvi Contents
14
16-Bit MS-DOS Programming 562
14.1 MS-DOS and the IBM-PC 562
14.1.1 Memory Organization 563 14.1.2 Redirecting Input-Output 564 14.1.3 Software Interrupts 565 14.1.4 INT Instruction 565 14.1.5 Coding for 16-Bit Programs 567 14.1.6 Section Review 568
14.2 MS-DOS Function Calls (INT 21h) 568
14.2.1 Selected Output Functions 570 14.2.2 Hello World Program Example 572 14.2.3 Selected Input Functions 573 14.2.4 Date/Time Functions 577 14.2.5 Section Review 581
14.3 Standard MS-DOS File I/O Services 581
14.3.1 Create or Open File (716Ch) 583 14.3.2 Close File Handle (3Eh) 584 14.3.3 Move File Pointer (42h) 584 14.3.4 Get File Creation Date and Time 585 14.3.5 Selected Library Procedures 585 14.3.6 Example: Read and Copy a Text File 586 14.3.7 Reading the MS-DOS Command Tail 588 14.3.8 Example: Creating a Binary File 591 14.3.9 Section Review 594
14.4 Chapter Summary 594
14.5 Programming Exercises 596
Chapters are available from the Companion Web site
15
Disk Fundamentals
16
BIOS-Level Programming
17
Expert MS-DOS Programming
Appendix A MASM Reference 598 Appendix B The x86 Instruction Set 620 Appendix C Answers to Review Questions 655
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
Contents xvii
Appendices are available from the Companion Web site
Appendix D BIOS and MS-DOS Interrupts Appendix E Answers to Review Questions
(Chapters 15–17)
Index 699
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
This page intentionally left blank
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
xix
Preface
Assembly Language for x86 Processors, Sixth Edition, teaches assembly language programming and architecture for Intel and AMD processors. It is an appropriate text for the following types of college courses:
• Assembly Language Programming • Fundamentals of Computer Systems • Fundamentals of Computer Architecture
Students use Intel or AMD processors and program with Microsoft Macro Assembler (MASM), running on Windows 98, XP, Vista, and Windows 7. Although this book was originally designed as a programming textbook for college students, it serves as an effective supplement to computer architecture courses. As a testament to its popularity, previous editions have been translated into Spanish, Korean, Chinese, French, Russian, and Polish.
Emphasis of Topics This edition includes topics that lead naturally into subsequent courses in computer architecture, operating systems, and compiler writing:
• Virtual machine concept • Instruction set architecture • Elementary Boolean operations • Instruction execution cycle • Memory access and handshaking • Interrupts and polling • Hardware-based I/O • Floating-point binary representation
Other topics relate specially to Intel and AMD architecture:
• Protected memory and paging • Memory segmentation in real-address mode • 16-bit interrupt handling • MS-DOS and BIOS system calls (interrupts) • Floating-point unit architecture and programming • Instruction encoding
Certain examples presented in the book lend themselves to courses that occur later in a computer science curriculum:
• Searching and sorting algorithms • High-level language structures
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
xx Preface
• Finite-state machines • Code optimization examples
What’s New in the Sixth Edition In this revision, we have placed a strong emphasis on improving the descriptions of important programming concepts and relevant program examples.
• We have added numerous step-by-step descriptions of sample programs, particularly in Chapters 1–8.
• Many new illustrations have been inserted into the chapters to improve student comprehen- sion of concepts and details.
• Java Bytecodes: The Java Virtual Machine (JVM) provides an excellent real-life example of a stack-oriented architecture. It provides an excellent contrast to x86 architecture. Therefore, in Chapters 8 and 9, the author explains the basic operation of Java bytecodes with short illus- trative examples. Numerous short examples are shown in disassembled bytecode format, fol- lowed by detailed step-by-step explanations.
• Selected programming exercises have been replaced in the first 8 chapters. Programming exercises are now assigned stars to indicate their difficulty. One star is the easiest, four stars indicate the most difficult level.
• Tutorial videos by the author are available on the Companion Web site (www.pearsonhighered.com/ irvine) to explain worked-out programming exercises.
• The order of chapters in the second half of the book has been revised to form a more logical sequence of topics, and selected chapters are supplied in electronic form for easy searching.
This book is still focused on its primary goal, to teach students how to write and debug programs at the machine level. It will never replace a complete book on computer architecture, but it does give students the first-hand experience of writing software in an environment that teaches them how a computer works. Our premise is that students retain knowledge better when theory is combined with experience. In an engineering course, students construct prototypes; in a com- puter architecture course, students should write machine-level programs. In both cases, they have a memorable experience that gives them the confidence to work in any OS/machine-oriented environment.
Real Mode and Protected Mode This edition emphasizes 32-bit protected mode, but it still has three electronic chapters devoted to real-mode programming. For example, there is an entire chapter on BIOS programming for the keyboard, video display (including graphics), and mouse. Another chapter covers MS-DOS programming using interrupts (system calls). Students can benefit from programming directly to hardware and the BIOS.
The examples in the first half of the book are nearly all presented as 32-bit text-oriented appli- cations running in protected mode using the flat memory model. This approach is wonderfully simple because it avoids the complications of segment-offset addressing. Specially marked para- graphs and popup boxes point out occasional differences between protected mode and real-mode programming. Most differences are abstracted by the book’s parallel link libraries for real-mode and protected mode programming.
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
Preface xxi
Link Libraries We supply two versions of the link library that students use for basic input- output, simulations, timing, and other useful stuff. The 32-bit version (Irvine32.lib) runs in protected mode, sending its output to the Win32 console. The 16-bit version (Irvine16.lib) runs in real-address mode. Full source code for the libraries is supplied on the Companion Web site. The link libraries are available only for convenience, not to prevent students from learning how to program input-output themselves. Students are encouraged to create their own libraries.
Included Software and Examples All the example programs were tested with Microsoft Macro Assembler Version 10.0, running in Microsoft Visual Studio 2010. In addition, batch files are supplied that permit students to assemble and run applications from the Windows command prompt. The 32-bit C++ applications in Chapter 14 were tested with Microsoft Visual C++ .NET.
Web Site Information Updates and corrections to this book may be found at the Companion Web site, including additional programming projects for instructors to assign at the ends of chapters.
Overall Goals The following goals of this book are designed to broaden the student’s interest and knowledge in topics related to assembly language:
• Intel and AMD processor architecture and programming • Real-address mode and protected mode programming • Assembly language directives, macros, operators, and program structure • Programming methodology, showing how to use assembly language to create system-level
software tools and application programs • Computer hardware manipulation • Interaction between assembly language programs, the operating system, and other applica-
tion programs
One of our goals is to help students approach programming problems with a machine-level mind set. It is important to think of the CPU as an interactive tool, and to learn to monitor its operation as directly as possible. A debugger is a programmer’s best friend, not only for catching errors, but as an educational tool that teaches about the CPU and operating system. We encourage stu- dents to look beneath the surface of high-level languages and to realize that most programming languages are designed to be portable and, therefore, independent of their host machines. In addition to the short examples, this book contains hundreds of ready-to-run programs that dem- onstrate instructions or ideas as they are presented in the text. Reference materials, such as guides to MS-DOS interrupts and instruction mnemonics, are available at the end of the book.
Required Background The reader should already be able to program confidently in at least one high-level programming language such as Python, Java, C, or C++. One chapter covers C++ interfacing, so it is very helpful to have a compiler on hand. I have used this book in the class- room with majors in both computer science and management information systems, and it has been used elsewhere in engineering courses.
Features Complete Program Listings The Companion Web site contains supplemental learning mate- rials, study guides, and all the source code from the book’s examples. An extensive link library
Downloaded From: www.bsit.zxq.net
For More BS-IT Books, Notes & Assignments visit: www.bsit.zxq.net
xxii Preface
is supplied with the book, containing more than 30 procedures that simplify user input-output, numeric processing, disk and file handling, and string handling. In the beginning stages of the course, students can use this library to enhance their programs. Later, they can create their own procedures and add them to the library.
Programming Logic Two chapters emphasize Boolean logic and bit-level manipulation. A conscious attempt is made to relate high-level programming logic to the low-level details of the machine. This approach helps students to create more efficient implementations and to better understand how compilers generate object code.
Hardware and Operating System Concepts The first two chapters introduce basic hard- ware and data representation concepts, including binary numbers, CPU architecture, status flags, and memory mapping. A survey of the computer’s hardware and a historical perspective of the Intel processor family helps students to better understand their target computer system.
Structured Programming Approach Beginning with Chapter 5, procedures and functional decomposition are emphasized. Students are given more complex programming exercises, requiring them to focus on design before starting to write code.
Java Bytecodes and the Java Virtual Machine In Chapters 8 and 9, the author explains the basic operation of Java bytecodes with short illustrative examples. Numerous short examples are shown in disassembled bytecode format, followed by detailed step-by-step explanations.
Disk Storage Concepts Students learn the fundamental principles behind the disk storage system on MS-Windows–based systems from hardware and software points of view.