Assembly Language for x86 Processors / Edition 6

Hardcover (Print)
Rent
Rent from BN.com
$30.47
(Save 83%)
Est. Return Date: 09/20/2014
Used and New from Other Sellers
Used and New from Other Sellers
from $49.96
Usually ships in 1-2 business days
(Save 72%)
Other sellers (Hardcover)
  • All (23) from $49.96   
  • New (2) from $168.78   
  • Used (21) from $49.96   

Overview

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.

Read More Show Less

Editorial Reviews

From the Publisher
“This textbook [Irvine] teaches assembly and architecture fundamentals in a logical and concise manner for students with a reasonable CS1 backgrounds…and are applicable to higher-level programmers as to their understanding of what is happing to the code that they write and how it behaves during compilation and execution.” — John Doyle, Indiana University, Southeast

“The problems and exercises are of good quality and quantity; they always have similarity within the chapter examples, but they are presented in a more challenging way. Students can pick-up skills that can be transferred to solving a new problem.” — Yinping Jiao, South Texas College

“The book [Irvine] is well-organized. The chapters are lined-up such that after you cover the foundations presented in chapter 1-8, you can jump to any chapter you like consistent with what you think the students should know for upcoming classes.” — Remzi Seker, University of Arkansas, Little Rock

“Wonderful! This edition…added clearer examples to make it easy to understand assembly language and computer architecture from the programmer’s point-of-view. I am very impressed with the clarity of explanations. The diagrams are simple and complement the discussions perfectly.” — David Topham, Ohlone College

“The coverage of 16-bit mode is superb…”increasingly historical.”” — John-Thomas Amenyo, York College, City College of New York

Read More Show Less

Product Details

  • ISBN-13: 9780136022121
  • Publisher: Prentice Hall
  • Publication date: 3/11/2010
  • Edition description: Sixth Edition
  • Edition number: 6
  • Pages: 715
  • Sales rank: 264,106
  • Product dimensions: 7.20 (w) x 9.00 (h) x 1.30 (d)

Meet the Author

Kip Irvine has written five computer programming textbooks, for Intel Assembly Language, C++, Visual Basic (beginning and advanced), and COBOL. His book Assembly Language for Intel-Based Computers has been translated into six languages. His first college degrees (B.M., M.M., and doctorate) were in Music Composition, at University of Hawaii and University of Miami. He began programming computers for music synthesis around 1982 and taught programming at Miami-Dade Community College for 17 years. Kip earned an M.S. degree in Computer Science from the University of Miami, and he has been a full-time member of the faculty in the School of Computing and Information Sciences at Florida International University since 2000.

Read More Show Less

Table of 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

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

Read More Show Less

Customer Reviews

Be the first to write a review
( 0 )
Rating Distribution

5 Star

(0)

4 Star

(0)

3 Star

(0)

2 Star

(0)

1 Star

(0)

Your Rating:

Your Name: Create a Pen Name or

Barnes & Noble.com Review Rules

Our reader reviews allow you to share your comments on titles you liked, or didn't, with others. By submitting an online review, you are representing to Barnes & Noble.com that all information contained in your review is original and accurate in all respects, and that the submission of such content by you and the posting of such content by Barnes & Noble.com does not and will not violate the rights of any third party. Please follow the rules below to help ensure that your review can be posted.

Reviews by Our Customers Under the Age of 13

We highly value and respect everyone's opinion concerning the titles we offer. However, we cannot allow persons under the age of 13 to have accounts at BN.com or to post customer reviews. Please see our Terms of Use for more details.

What to exclude from your review:

Please do not write about reviews, commentary, or information posted on the product page. If you see any errors in the information on the product page, please send us an email.

Reviews should not contain any of the following:

  • - HTML tags, profanity, obscenities, vulgarities, or comments that defame anyone
  • - Time-sensitive information such as tour dates, signings, lectures, etc.
  • - Single-word reviews. Other people will read your review to discover why you liked or didn't like the title. Be descriptive.
  • - Comments focusing on the author or that may ruin the ending for others
  • - Phone numbers, addresses, URLs
  • - Pricing and availability information or alternative ordering information
  • - Advertisements or commercial solicitation

Reminder:

  • - By submitting a review, you grant to Barnes & Noble.com and its sublicensees the royalty-free, perpetual, irrevocable right and license to use the review in accordance with the Barnes & Noble.com Terms of Use.
  • - Barnes & Noble.com reserves the right not to post any review -- particularly those that do not follow the terms and conditions of these Rules. Barnes & Noble.com also reserves the right to remove any review at any time without notice.
  • - See Terms of Use for other conditions and disclaimers.
Search for Products You'd Like to Recommend

Recommend other products that relate to your review. Just search for them below and share!

Create a Pen Name

Your Pen Name is your unique identity on BN.com. It will appear on the reviews you write and other website activities. Your Pen Name cannot be edited, changed or deleted once submitted.

 
Your Pen Name can be any combination of alphanumeric characters (plus - and _), and must be at least two characters long.

Continue Anonymously

    If you find inappropriate content, please report it to Barnes & Noble
    Why is this product inappropriate?
    Comments (optional)