{"product_id":"x64-assembly-language-step-by-step-isbn-9781394155248","title":"x64 Assembly Language Step-by-Step","description":"\u003cp\u003e\u003cb\u003eThe long-awaited x64 edition of the bestselling introduction to Intel assembly language\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIn the newly revised fourth edition of \u003ci\u003ex64 Assembly Language Step-by-Step: Programming with Linux\u003c\/i\u003e, author Jeff Duntemann delivers an extensively rewritten introduction to assembly language with a strong focus on 64-bit long-mode Linux assembler. The book offers a lighthearted, robust, and accessible approach to a challenging technical discipline, giving you a step-by-step path to learning assembly code that’s engaging and easy to read.\u003c\/p\u003e \u003cp\u003e\u003ci\u003ex64 Assembly Language Step-by-Step\u003c\/i\u003e makes quick work of programmable computing basics, the concepts of binary and hexadecimal number systems, the Intel x86\/x64 computer architecture, and the process of Linux software development to dive deep into the x64 instruction set, memory addressing, procedures, macros, and interface to the C-language code libraries on which Linux is built.\u003c\/p\u003e \u003cp\u003eYou’ll also find:\u003c\/p\u003e \u003cul\u003e \u003cli\u003eA set of free and open-source development and debugging tools you can download and put to use immediately\u003c\/li\u003e \u003cli\u003eNumerous examples woven throughout the book to illustrate the practical implementation of the ideas discussed within\u003c\/li\u003e \u003cli\u003ePractical tips on software design, coding, testing, and debugging\u003c\/li\u003e \u003c\/ul\u003e \u003cp\u003eA one-stop resource for aspiring and practicing Intel assembly programmers, the latest edition of this celebrated text provides readers with an authoritative tutorial approach to x64 technology that’s ideal for self-paced instruction. Please note, the author's listings that accompany this book are available from the author website at www.contrapositivediary.com under his heading \"My Assembly Language Books.\"\u003c\/p\u003e \u003cp\u003eIntroduction xxix\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 1 It’s All in the Plan 1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eAnother Pleasant Valley Saturday 1\u003c\/p\u003e \u003cp\u003eHad This Been the Real Thing 5\u003c\/p\u003e \u003cp\u003eAssembly Language Programming As a Square Dance 5\u003c\/p\u003e \u003cp\u003eAssembly Language Programming As a Board Game 6\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 2 Alien Bases 11\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Return of the New Math Monster 11\u003c\/p\u003e \u003cp\u003eOctal: How the Grinch Stole Eight and Nine 16\u003c\/p\u003e \u003cp\u003eHexadecimal: Solving the Digit Shortage 20\u003c\/p\u003e \u003cp\u003eFrom Hex to Decimal and from Decimal to Hex 24\u003c\/p\u003e \u003cp\u003ePractice. Practice! PRACTICE! 27\u003c\/p\u003e \u003cp\u003eArithmetic in Hex 28\u003c\/p\u003e \u003cp\u003eBinary 34\u003c\/p\u003e \u003cp\u003eHexadecimal as Shorthand for Binary 38\u003c\/p\u003e \u003cp\u003ePrepare to Compute 40\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 3 Lifting the Hood 41\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eRAXie, We Hardly Knew Ye 41\u003c\/p\u003e \u003cp\u003eSwitches, Transistors, and Memory 43\u003c\/p\u003e \u003cp\u003eThe Shop Supervisor and the Assembly Line 54\u003c\/p\u003e \u003cp\u003eThe Box That Follows a Plan 58\u003c\/p\u003e \u003cp\u003eWhat vs. How: Architecture and Microarchitecture 63\u003c\/p\u003e \u003cp\u003eEnter the Plant Manager 67\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 4 Location, Location, Location 73\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Joy of Memory Models 73\u003c\/p\u003e \u003cp\u003eThe Nature of Segments 80\u003c\/p\u003e \u003cp\u003eSegment Registers 87\u003c\/p\u003e \u003cp\u003eThe Four Major Assembly Programming Models 95\u003c\/p\u003e \u003cp\u003e64-Bit Long Mode 101\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 5 The Right to Assemble 103\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Nine and Sixty Ways to Code 103\u003c\/p\u003e \u003cp\u003eFiles and What’s Inside Them 104\u003c\/p\u003e \u003cp\u003eText In, Code Out 115\u003c\/p\u003e \u003cp\u003eThe Assembly Language Development Process 123\u003c\/p\u003e \u003cp\u003eLinking the Object Code File 130\u003c\/p\u003e \u003cp\u003eTaking a Trip Down Assembly Lane 134\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 6 A Place to Stand, with Access to Tools 143\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIntegrated Development Environments 143\u003c\/p\u003e \u003cp\u003eIntroducing SASM 146\u003c\/p\u003e \u003cp\u003eLinux and Terminals 153\u003c\/p\u003e \u003cp\u003eUsing Linux Make 164\u003c\/p\u003e \u003cp\u003eDebugging with SASM 172\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 7 Following Your Instructions 175\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eBuild Yourself a Sandbox 176\u003c\/p\u003e \u003cp\u003eInstructions and Their Operands 178\u003c\/p\u003e \u003cp\u003eSource and Destination Operands 178\u003c\/p\u003e \u003cp\u003eRally Round the Flags, Boys! 186\u003c\/p\u003e \u003cp\u003eSigned and Unsigned Values 195\u003c\/p\u003e \u003cp\u003eImplicit Operands and MUL 200\u003c\/p\u003e \u003cp\u003eReading and Using an Assembly Language Reference 205\u003c\/p\u003e \u003cp\u003eNEG Negate (Two’s Complement; i.e., Multiply by −1) 208\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 8 Our Object All Sublime 213\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Bones of an Assembly Language Program 213\u003c\/p\u003e \u003cp\u003eLast In, First Out via the Stack 223\u003c\/p\u003e \u003cp\u003eUsing Linux Kernel Services Through Syscall 231\u003c\/p\u003e \u003cp\u003eDesigning a Nontrivial Program 235\u003c\/p\u003e \u003cp\u003eGoing Further 248\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 9 Bits, Flags, Branches, and Tables 251\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eBits Is Bits (and Bytes Is Bits) 251\u003c\/p\u003e \u003cp\u003eShifting Bits 258\u003c\/p\u003e \u003cp\u003eBit-Bashing in Action 262\u003c\/p\u003e \u003cp\u003eFlags, Tests, and Branches 270\u003c\/p\u003e \u003cp\u003eX64 Long Mode Memory Addressing in Detail 279\u003c\/p\u003e \u003cp\u003eCharacter Table Translation 290\u003c\/p\u003e \u003cp\u003eTables Instead of Calculations 298\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 10 Dividing and Conquering 299\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eBoxes within Boxes 300\u003c\/p\u003e \u003cp\u003eCalling and Returning 309\u003c\/p\u003e \u003cp\u003eLocal Labels and the Lengths of Jumps 325\u003c\/p\u003e \u003cp\u003eBuilding External Procedure Libraries 330\u003c\/p\u003e \u003cp\u003eThe Art of Crafting Procedures 352\u003c\/p\u003e \u003cp\u003eSimple Cursor Control in the Linux Console 356\u003c\/p\u003e \u003cp\u003eCreating and Using Macros 364\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 11 Strings and Things 377\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Notion of an Assembly Language String 378\u003c\/p\u003e \u003cp\u003eREP STOSB, the Software Machine Gun 387\u003c\/p\u003e \u003cp\u003eThe Semiautomatic Weapon: STOSB Without REP 392\u003c\/p\u003e \u003cp\u003eMOVSB: Fast Block Copies 397\u003c\/p\u003e \u003cp\u003eStoring Data to Discontinuous Strings 402\u003c\/p\u003e \u003cp\u003eCommand-Line Arguments, String Searches, and the Linux Stack 408\u003c\/p\u003e \u003cp\u003eThe Stack, Its Structure, and How to Use It 414\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 12 Heading Out to C 423\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat’s GNU? 424\u003c\/p\u003e \u003cp\u003eLinking to the Standard C Library 429\u003c\/p\u003e \u003cp\u003eFormatted Text Output with printf() 438\u003c\/p\u003e \u003cp\u003eData In with fgets() and scanf() 442\u003c\/p\u003e \u003cp\u003eBe a Linux Time Lord 448\u003c\/p\u003e \u003cp\u003eUnderstanding AT\u0026amp;T Instruction Mnemonics 456\u003c\/p\u003e \u003cp\u003eGenerating Random Numbers 460\u003c\/p\u003e \u003cp\u003eHow C Sees Command-Line Arguments 472\u003c\/p\u003e \u003cp\u003eSimple File I\/O 474\u003c\/p\u003e \u003cp\u003e\u003cb\u003eConclusion: Not the End, But Only the Beginning 489\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eAppendix A The Return of the Insight Debugger 493\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eInsight’s Shortcomings 494\u003c\/p\u003e \u003cp\u003eOpening a Program Under Insight 495\u003c\/p\u003e \u003cp\u003eSetting Command-Line Arguments with Insight 496\u003c\/p\u003e \u003cp\u003eRunning and Stepping a Program 496\u003c\/p\u003e \u003cp\u003eThe Memory Window 497\u003c\/p\u003e \u003cp\u003eShowing the Stack in Insight’s Memory View 498\u003c\/p\u003e \u003cp\u003eExamining the Stack with Insight’s Memory View 498\u003c\/p\u003e \u003cp\u003eLearn gdb! 500\u003c\/p\u003e \u003cp\u003e\u003cb\u003eAppendix B Partial x64 Instruction Reference 501\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat’s Been Removed from x64 502\u003c\/p\u003e \u003cp\u003eFlag Results 502\u003c\/p\u003e \u003cp\u003eSize Specifiers 503\u003c\/p\u003e \u003cp\u003eInstruction Index 505\u003c\/p\u003e \u003cp\u003eADC: Arithmetic Addition with Carry 507\u003c\/p\u003e \u003cp\u003eADD: Arithmetic Addition 509\u003c\/p\u003e \u003cp\u003eAND: Logical AND 511\u003c\/p\u003e \u003cp\u003eBT: Bit Test 513\u003c\/p\u003e \u003cp\u003eCALL: Call Procedure 515\u003c\/p\u003e \u003cp\u003eCLC: Clear Carry Flag (CF) 517\u003c\/p\u003e \u003cp\u003eCLD: Clear Direction Flag (DF) 518\u003c\/p\u003e \u003cp\u003eCMP: Arithmetic Comparison 519\u003c\/p\u003e \u003cp\u003eDEC: Decrement Operand 521\u003c\/p\u003e \u003cp\u003eDIV: Unsigned Integer Division 522\u003c\/p\u003e \u003cp\u003eINC: Increment Operand 524\u003c\/p\u003e \u003cp\u003eJ??: Jump If Condition Is Met 525\u003c\/p\u003e \u003cp\u003eJECXZ: Jump if ECX=0 527\u003c\/p\u003e \u003cp\u003eJRCXZ: Jump If RCX=0 528\u003c\/p\u003e \u003cp\u003eJMP: Unconditional Jump 529\u003c\/p\u003e \u003cp\u003eLEA: Load Effective Address 531\u003c\/p\u003e \u003cp\u003eLOOP: Loop Until CX\/ECX\/RCX=0 532\u003c\/p\u003e \u003cp\u003eLOOPNZ\/LOOPNE: Loop Until CX\/ECX\/RCX=0 and ZF=0 534\u003c\/p\u003e \u003cp\u003eLOOPZ\/LOOPE: Loop Until CX\/ECX\/RCX=0 and ZF=1 535\u003c\/p\u003e \u003cp\u003eMOV: Copy Right Operand into Left Operand 536\u003c\/p\u003e \u003cp\u003eMOVS: Move String 538\u003c\/p\u003e \u003cp\u003eMOVSX: Copy with Sign Extension 540\u003c\/p\u003e \u003cp\u003eMUL: Unsigned Integer Multiplication 542\u003c\/p\u003e \u003cp\u003eNEG: Negate (Two’s Complement; i.e., Multiply by −1) 544\u003c\/p\u003e \u003cp\u003eNOP: No Operation 546\u003c\/p\u003e \u003cp\u003eNOT: Logical NOT (One’s Complement) 547\u003c\/p\u003e \u003cp\u003eOR: Logical OR 548\u003c\/p\u003e \u003cp\u003ePOP: Copy Top of Stack into Operand 550\u003c\/p\u003e \u003cp\u003ePOPF\/D\/Q: Copy Top of Stack into Flags Register 552\u003c\/p\u003e \u003cp\u003ePUSH: Push Operand onto Top of Stack 553\u003c\/p\u003e \u003cp\u003ePUSHF\/D\/Q: Push Flags Onto the Stack 555\u003c\/p\u003e \u003cp\u003eRET: Return from Procedure 556\u003c\/p\u003e \u003cp\u003eROL\/ROR: Rotate Left\/Rotate Right 558\u003c\/p\u003e \u003cp\u003eSBB: Arithmetic Subtraction with Borrow 560\u003c\/p\u003e \u003cp\u003eSHL\/SHR: Shift Left\/Shift Right 562\u003c\/p\u003e \u003cp\u003eSTC: Set Carry Flag (CF) 564\u003c\/p\u003e \u003cp\u003eSTD: Set Direction Flag (DF) 565\u003c\/p\u003e \u003cp\u003eSTOS\/B\/W\/D\/Q: Store String 566\u003c\/p\u003e \u003cp\u003eSUB: Arithmetic Subtraction 568\u003c\/p\u003e \u003cp\u003eSYSCALL: Fast System Call into Linux 570\u003c\/p\u003e \u003cp\u003eXCHG: Exchange Operands 571\u003c\/p\u003e \u003cp\u003eXLAT: Translate Byte Via Table 572\u003c\/p\u003e \u003cp\u003eXOR: Exclusive OR 573\u003c\/p\u003e \u003cp\u003eAppendix C Character Set Charts 575\u003c\/p\u003e \u003cp\u003eIndex 579\u003c\/p\u003e  \u003cp\u003e\u003cb\u003eJEFF DUNTEMANN\u003c\/b\u003e is an accomplished author of both science fiction and technical nonfiction. He has published dozens of technical articles in magazines, co-founded The Coriolis Group, a large publishing house in Arizona, and works as a technical publishing consultant. He owns Copperwood Press, a POD imprint hosted on amazon.com.   \u003c\/p\u003e\u003cp\u003e\u003cb\u003eAn engaging and essential update of the bestselling introduction to Intel assembly language\u003c\/b\u003e \u003c\/p\u003e\u003cp\u003eAssembly language is where the program code meets the silicon. Nevertheless, most beginners and many software engineers struggle with assembly, instead relying on high-level languages to do the job. In this fourth edition of \u003ci\u003ex64 Assembly Language Step-by-Step: Programming with Linux\u003c\/i\u003e, celebrated author Jeff Duntemann delivers a completely rewritten introduction to assembly language focused on 64-bit long-mode under Linux. \u003c\/p\u003e\u003cp\u003eThe author covers computing and programming basics, binary and hexadecimal number bases, the x64 architecture, and the process of Linux software development. Along the way you’ll get hands-on experience with the x64 instruction set, memory addressing, procedures, macros, and interfacing to the C library functions upon which Linux is built. The book is lighthearted, robust, and accessible, offering a step-by-step path to assembly coding that covers the bases while being easy to read. \u003c\/p\u003e\u003cp\u003eYou’ll learn the free NASM assembler and debugging tools you can download and use immediately, along with numerous code examples throughout the book. You’ll also get practical tips on software design, coding, testing, and debugging that will sharpen your assembly programming skills. \u003c\/p\u003e\u003cp\u003e\u003ci\u003ex64 Assembly Language Step-by-Step: Programming with Linux\u003c\/i\u003e, 4th Edition, is an authoritative tutorial to Intel\/AMD x64 technology that’s perfect for self-paced instruction. This latest edition will cement the book’s reputation as the gold standard for x64 assembly language introductions.\u003c\/p\u003e","brand":"Wiley","offers":[{"title":"Default Title","offer_id":47990512615653,"sku":"NP9781394155248","price":65.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1842\/7735\/files\/9781394155248.jpg?v=1761788128","url":"https:\/\/k12savings.com\/es\/products\/x64-assembly-language-step-by-step-isbn-9781394155248","provider":"K12savings","version":"1.0","type":"link"}