Register your product to gain access to bonus material or receive a coupon.
Flexibility
– Offers optional chapter topics in the final 7 chapters.
– Allows instructors to cover these chapters in varying order and depth.
32-bit, Protected-mode programming as the default model
– Uses the native mode of the IA-32 processor family (Intel 386 and later).
– Makes addressing easier to understand because students no longer deal with memory segmentation issues. Students can create applications that take full advantage of 32-bit Intel processors, such as protected-mode and flat memory addressing. This also allows students to create Microsoft® Windows applications.
Extensive link libraries
– For both 32-bit and 16-bit programming.
– Contains more than 40 procedures that simplify input/output, numeric processing, disk and file handling, and string handling.
Testbanks for each chapter
– Prepared by the author.
– Aids instructors in preparing exams.
Top-down program design demonstration and explanation
– Teaches students effective design techniques that apply to multiple programming courses.
– Gives students clear-cut methods for organizing nontrivial programs as assembly language is by nature unstructured.
– Assists students in forming visual images of program design and logic with flowcharts.
PowerPoint® lecture slides
– Prepared by the author in the supplemental material.
– Enables instructors to have prepared lectures; allows students to print out and study the slides as lecture notes.
Review exercises
– At the end of every section.
– Aids students in their comprehension skills.
– Answers to questions are included for instructors to use in test material.
Programming exercises with solutions.
– Gives students first-hand experience in writing software and allows them to immediately check on their results.
Companion Web site
– With lists of errata, Frequently Asked Questions, new programs, and articles about special topics.
– Enables students to reinforce their understanding of the material presented in the course. Receives approximately 80,000 hits per month–the most extensive Web site by any published assembly-language programming author.
– Assembly Language Workbook on Web site provides expanded drill and practice on basic numeric and data manipulation skills, a feature provided by no other author.
VideoNotes
VideoNotes are step-by-step video tutorials specifically designed to enhance the programming concepts presented in Irvine, Assembly Language for X86 Processors, 6e. Students can view the entire problem-solving process outside of the classroom–when they need help the most. VideoNotes are available with the purchase of a new copy of select titles. Go to www.pearsonhighered.com/videonotes for a brief VideoNotes demo.
SUPPLEMENTS
Instructor Resource Materials (Catalog Download):Assembly Language for x86 Processors, 6/e is ideal for undergraduate courses in assembly language programming and introductory courses in computer systems and computer architecture.
Written specifically for the Intel/Windows/DOS platform, this complete and fully updated study of assembly language teaches students to write and debug programs at the machine level. Based on the Intel processor family, the text simplifies and demystifies concepts that students need to grasp before they can go on to more advanced computer architecture and operating systems courses. Students put theory into practice through writing software at the machine level, creating a memorable experience that gives them the confidence to work in any OS/machine-oriented environment. Proficiency in one other programming language, preferably Java, C, or C++, is recommended.
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
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
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
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
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 Jcond 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
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 .REPEAT and .WHILE Directives 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
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
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 3599.6 Java Bytecodes: String Processing 359
9.7 Chapter Summary 360
9.8 Programming Exercises 361
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
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
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 55913.5 Chapter Summary 560
13.6 Programming Exercises 561
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 Chapter 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