{"product_id":"professional-assembly-language-paperback-softback-9780764579011","title":"Professional Assembly Language (Paperback \/ softback) 9780764579011","description":"\u003cfont face=\"Georgia\"\u003e\r\n\u003cp\u003e\u003cfont size=\"6\"\u003eProfessional Assembly Language\u003c\/font\u003e\u003cbr\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003c\/p\u003e\n\u003cp\u003e\u003cfont size=\"4\"\u003eRichard Blum (Author)\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e9780764579011, Wiley\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003ePaperback \/ softback, published 11 February 2005\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e576 pages, Drawings: 76 B\u0026amp;W, 0 Color; Tables: 86 B\u0026amp;W, 0 Color\u003cbr\u003e23.4 x 18.5 x 3 cm, 0.93 kg\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003cp align=\"justify\"\u003e\u003cstrong\u003e\u003cfont size=\"3\"\u003e\u003cul\u003e \u003cli\u003eUnlike high-level languages such as Java and C++, assembly language is much closer to the machine code that actually runs computers; it's used to create programs or modules that are very fast and efficient, as well as in hacking exploits and reverse engineering\u003c\/li\u003e \u003cli\u003eCovering assembly language in the Pentium microprocessor environment, this code-intensive guide shows programmers how to create stand-alone assembly language programs as well as how to incorporate assembly language libraries or routines into existing high-level applications\u003c\/li\u003e \u003cli\u003eDemonstrates how to manipulate data, incorporate advanced functions and libraries, and maximize application performance\u003c\/li\u003e \u003cli\u003eExamples use C as a high-level language, Linux as the development environment, and GNU tools for assembling, compiling, linking, and debugging\u003c\/li\u003e \u003c\/ul\u003e\u003c\/font\u003e\u003c\/strong\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e\u003cp\u003eAcknowledgments xi\u003c\/p\u003e \u003cp\u003eContents xiii\u003c\/p\u003e \u003cp\u003eIntroduction xxiii\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 1: What Is Assembly Language? 1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eProcessor Instructions 1\u003c\/p\u003e \u003cp\u003eInstruction code handling 2\u003c\/p\u003e \u003cp\u003eInstruction code format 3\u003c\/p\u003e \u003cp\u003eHigh-Level Languages 6\u003c\/p\u003e \u003cp\u003eTypes of high-level languages 7\u003c\/p\u003e \u003cp\u003eHigh-level language features 9\u003c\/p\u003e \u003cp\u003eAssembly Language 10\u003c\/p\u003e \u003cp\u003eOpcode mnemonics 11\u003c\/p\u003e \u003cp\u003eDefining data 12\u003c\/p\u003e \u003cp\u003eDirectives 14\u003c\/p\u003e \u003cp\u003eSummary 15\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 2: The IA-32 Platform 17\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCore Parts of an IA-32 Processor 17\u003c\/p\u003e \u003cp\u003eControl unit 19\u003c\/p\u003e \u003cp\u003eExecution unit 24\u003c\/p\u003e \u003cp\u003eRegisters 25\u003c\/p\u003e \u003cp\u003eFlags 29\u003c\/p\u003e \u003cp\u003eAdvanced IA-32 Features 32\u003c\/p\u003e \u003cp\u003eThe x87 floating-point unit 32\u003c\/p\u003e \u003cp\u003eMultimedia extensions (MMX) 33\u003c\/p\u003e \u003cp\u003eStreaming SIMD extensions (SSE) 33\u003c\/p\u003e \u003cp\u003eHyperthreading 34\u003c\/p\u003e \u003cp\u003eThe IA-32 Processor Family 34\u003c\/p\u003e \u003cp\u003eIntel processors 35\u003c\/p\u003e \u003cp\u003eNon-Intel processors 36\u003c\/p\u003e \u003cp\u003eSummary 37\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 3: The Tools of the Trade 39\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Development Tools 39\u003c\/p\u003e \u003cp\u003eThe Assembler 40\u003c\/p\u003e \u003cp\u003eThe Linker 42\u003c\/p\u003e \u003cp\u003eThe Debugger 43\u003c\/p\u003e \u003cp\u003eThe Compiler 44\u003c\/p\u003e \u003cp\u003eThe object code disassembler 44\u003c\/p\u003e \u003cp\u003eThe Profiler 44\u003c\/p\u003e \u003cp\u003eThe GNU Assembler 45\u003c\/p\u003e \u003cp\u003eInstalling the assembler 45\u003c\/p\u003e \u003cp\u003eUsing the assembler 47\u003c\/p\u003e \u003cp\u003eA word about opcode syntax 49\u003c\/p\u003e \u003cp\u003eThe GNU Linker 50\u003c\/p\u003e \u003cp\u003eThe GNU Compiler 53\u003c\/p\u003e \u003cp\u003eDownloading and installing gcc 53\u003c\/p\u003e \u003cp\u003eUsing gcc 54\u003c\/p\u003e \u003cp\u003eThe GNU Debugger Program 56\u003c\/p\u003e \u003cp\u003eDownloading and installing gdb 56\u003c\/p\u003e \u003cp\u003eUsing gdb 57\u003c\/p\u003e \u003cp\u003eThe KDE Debugger 60\u003c\/p\u003e \u003cp\u003eDownloading and installing kdbg 60\u003c\/p\u003e \u003cp\u003eUsing kdbg 60\u003c\/p\u003e \u003cp\u003eThe GNU Objdump Program 62\u003c\/p\u003e \u003cp\u003eUsing objdump 63\u003c\/p\u003e \u003cp\u003eAn objdump example 64\u003c\/p\u003e \u003cp\u003eThe GNU Profiler Program 65\u003c\/p\u003e \u003cp\u003eUsing the profiler 65\u003c\/p\u003e \u003cp\u003eA profile example 68\u003c\/p\u003e \u003cp\u003eA Complete Assembly Development System 69\u003c\/p\u003e \u003cp\u003eThe basics of Linux 69\u003c\/p\u003e \u003cp\u003eDownloading and running MEPIS 70\u003c\/p\u003e \u003cp\u003eYour new development system 71\u003c\/p\u003e \u003cp\u003eSummary 72\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 4: A Sample Assembly Language Program 73\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Parts of a Program 73\u003c\/p\u003e \u003cp\u003eDefining sections 74\u003c\/p\u003e \u003cp\u003eDefining the starting point 74\u003c\/p\u003e \u003cp\u003eCreating a Simple Program 75\u003c\/p\u003e \u003cp\u003eThe CPUID instruction 76\u003c\/p\u003e \u003cp\u003eThe sample program 77\u003c\/p\u003e \u003cp\u003eBuilding the executable 80\u003c\/p\u003e \u003cp\u003eRunning the executable 80\u003c\/p\u003e \u003cp\u003eAssembling using a compiler 80\u003c\/p\u003e \u003cp\u003eDebugging the Program 81\u003c\/p\u003e \u003cp\u003eUsing gdb 81\u003c\/p\u003e \u003cp\u003eUsing C Library Functions in Assembly 86\u003c\/p\u003e \u003cp\u003eUsing printf 87\u003c\/p\u003e \u003cp\u003eLinking with C library functions 88\u003c\/p\u003e \u003cp\u003eSummary 90\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 5: Moving Data 91\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eDefining Data Elements 91\u003c\/p\u003e \u003cp\u003eThe data section 91\u003c\/p\u003e \u003cp\u003eDefining static symbols 94\u003c\/p\u003e \u003cp\u003eThe bss section 95\u003c\/p\u003e \u003cp\u003eMoving Data Elements 97\u003c\/p\u003e \u003cp\u003eThe MOV instruction formats 97\u003c\/p\u003e \u003cp\u003eMoving immediate data to registers and memory 98\u003c\/p\u003e \u003cp\u003eMoving data between registers 99\u003c\/p\u003e \u003cp\u003eMoving data between memory and registers 99\u003c\/p\u003e \u003cp\u003eConditional Move Instructions 106\u003c\/p\u003e \u003cp\u003eThe CMOV instructions 107\u003c\/p\u003e \u003cp\u003eUsing CMOV instructions 109\u003c\/p\u003e \u003cp\u003eExchanging Data 110\u003c\/p\u003e \u003cp\u003eThe data exchange instructions 111\u003c\/p\u003e \u003cp\u003eUsing the data exchange instruction 116\u003c\/p\u003e \u003cp\u003eThe Stack 119\u003c\/p\u003e \u003cp\u003eHow the stack works 119\u003c\/p\u003e \u003cp\u003ePUSHing and POPing data 120\u003c\/p\u003e \u003cp\u003ePUSHing and POPing all the registers 123\u003c\/p\u003e \u003cp\u003eManually using the ESP and EBP registers 123\u003c\/p\u003e \u003cp\u003eOptimizing Memory Access 123\u003c\/p\u003e \u003cp\u003eSummary 124\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 6: Controlling Execution Flow 127\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Instruction Pointer 127\u003c\/p\u003e \u003cp\u003eUnconditional Branches 129\u003c\/p\u003e \u003cp\u003eJumps 129\u003c\/p\u003e \u003cp\u003eCalls 132\u003c\/p\u003e \u003cp\u003eInterrupts 135\u003c\/p\u003e \u003cp\u003eConditional Branches 136\u003c\/p\u003e \u003cp\u003eConditional jump instructions 136\u003c\/p\u003e \u003cp\u003eThe compare instruction 138\u003c\/p\u003e \u003cp\u003eExamples of using the flag bits 140\u003c\/p\u003e \u003cp\u003eLoops 144\u003c\/p\u003e \u003cp\u003eThe loop instructions 144\u003c\/p\u003e \u003cp\u003eA loop example 145\u003c\/p\u003e \u003cp\u003ePreventing LOOP catastrophes 145\u003c\/p\u003e \u003cp\u003eDuplicating High-Level Conditional Branches 146\u003c\/p\u003e \u003cp\u003eif statements 147\u003c\/p\u003e \u003cp\u003efor loops 150\u003c\/p\u003e \u003cp\u003eOptimizing Branch Instructions 153\u003c\/p\u003e \u003cp\u003eBranch prediction 153\u003c\/p\u003e \u003cp\u003eOptimizing tips 155\u003c\/p\u003e \u003cp\u003eSummary 158\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 7: Using Numbers 161\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eNumeric Data Types 161\u003c\/p\u003e \u003cp\u003eIntegers 162\u003c\/p\u003e \u003cp\u003eStandard integer sizes 162\u003c\/p\u003e \u003cp\u003eUnsigned integers 164\u003c\/p\u003e \u003cp\u003eSigned integers 166\u003c\/p\u003e \u003cp\u003eUsing signed integers 168\u003c\/p\u003e \u003cp\u003eExtending integers 169\u003c\/p\u003e \u003cp\u003eDefining integers in GAS 172\u003c\/p\u003e \u003cp\u003eSIMD Integers 173\u003c\/p\u003e \u003cp\u003eMMX integers 173\u003c\/p\u003e \u003cp\u003eMoving MMX integers 174\u003c\/p\u003e \u003cp\u003eSSE integers 176\u003c\/p\u003e \u003cp\u003eMoving SSE integers 177\u003c\/p\u003e \u003cp\u003eBinary Coded Decimal 178\u003c\/p\u003e \u003cp\u003eWhat is BCD? 178\u003c\/p\u003e \u003cp\u003eFPU BCD values 179\u003c\/p\u003e \u003cp\u003eMoving BCD values 180\u003c\/p\u003e \u003cp\u003eFloating-Point Numbers 182\u003c\/p\u003e \u003cp\u003eWhat are floating-point numbers? 182\u003c\/p\u003e \u003cp\u003eStandard floating-point data types 184\u003c\/p\u003e \u003cp\u003eIA-32 floating-point values 186\u003c\/p\u003e \u003cp\u003eDefining floating-point values in GAS 187\u003c\/p\u003e \u003cp\u003eMoving floating-point values 187\u003c\/p\u003e \u003cp\u003eUsing preset floating-point values 189\u003c\/p\u003e \u003cp\u003eSSE floating-point data types 190\u003c\/p\u003e \u003cp\u003eMoving SSE floating-point values 191\u003c\/p\u003e \u003cp\u003eConversions 196\u003c\/p\u003e \u003cp\u003eConversion instructions 196\u003c\/p\u003e \u003cp\u003eA conversion example 198\u003c\/p\u003e \u003cp\u003eSummary 199\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 8: Basic Math Functions 201\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eInteger Arithmetic 201\u003c\/p\u003e \u003cp\u003eAddition 201\u003c\/p\u003e \u003cp\u003eSubtraction 210\u003c\/p\u003e \u003cp\u003eIncrementing and decrementing 215\u003c\/p\u003e \u003cp\u003eMultiplication 216\u003c\/p\u003e \u003cp\u003eDivision 221\u003c\/p\u003e \u003cp\u003eShift Instructions 223\u003c\/p\u003e \u003cp\u003eMultiply by shifting 224\u003c\/p\u003e \u003cp\u003eDividing by shifting 225\u003c\/p\u003e \u003cp\u003eRotating bits 226\u003c\/p\u003e \u003cp\u003eDecimal Arithmetic 227\u003c\/p\u003e \u003cp\u003eUnpacked BCD arithmetic 227\u003c\/p\u003e \u003cp\u003ePacked BCD arithmetic 229\u003c\/p\u003e \u003cp\u003eLogical Operations 231\u003c\/p\u003e \u003cp\u003eBoolean logic 231\u003c\/p\u003e \u003cp\u003eBit testing 232\u003c\/p\u003e \u003cp\u003eSummary 233\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 9: Advanced Math Functions 235\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe FPU Environment 235\u003c\/p\u003e \u003cp\u003eThe FPU register stack 236\u003c\/p\u003e \u003cp\u003eThe FPU status, control, and tag registers 237\u003c\/p\u003e \u003cp\u003eUsing the FPU stack 242\u003c\/p\u003e \u003cp\u003eBasic Floating-Point Math 245\u003c\/p\u003e \u003cp\u003eAdvanced Floating-Point Math 249\u003c\/p\u003e \u003cp\u003eFloating-point functions 249\u003c\/p\u003e \u003cp\u003ePartial remainders 252\u003c\/p\u003e \u003cp\u003eTrigonometric functions 254\u003c\/p\u003e \u003cp\u003eLogarithmic functions 257\u003c\/p\u003e \u003cp\u003eFloating-Point Conditional Branches 259\u003c\/p\u003e \u003cp\u003eThe FCOM instruction family 260\u003c\/p\u003e \u003cp\u003eThe FCOMI instruction family 262\u003c\/p\u003e \u003cp\u003eThe FCMOV instruction family 263\u003c\/p\u003e \u003cp\u003eSaving and Restoring the FPU State 265\u003c\/p\u003e \u003cp\u003eSaving and restoring the FPU environment 265\u003c\/p\u003e \u003cp\u003eSaving and restoring the FPU state 266\u003c\/p\u003e \u003cp\u003eWaiting versus Nonwaiting Instructions 269\u003c\/p\u003e \u003cp\u003eOptimizing Floating-Point Calculations 270\u003c\/p\u003e \u003cp\u003eSummary 270\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 10: Working with Strings 273\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eMoving Strings 273\u003c\/p\u003e \u003cp\u003eThe MOVS instruction 274\u003c\/p\u003e \u003cp\u003eThe REP prefix 278\u003c\/p\u003e \u003cp\u003eOther REP instructions 283\u003c\/p\u003e \u003cp\u003eStoring and Loading Strings 283\u003c\/p\u003e \u003cp\u003eThe LODS instruction 283\u003c\/p\u003e \u003cp\u003eThe STOS instruction 284\u003c\/p\u003e \u003cp\u003eBuilding your own string functions 285\u003c\/p\u003e \u003cp\u003eComparing Strings 286\u003c\/p\u003e \u003cp\u003eThe CMPS instruction 286\u003c\/p\u003e \u003cp\u003eUsing REP with CMPS 288\u003c\/p\u003e \u003cp\u003eString inequality 289\u003c\/p\u003e \u003cp\u003eScanning Strings 291\u003c\/p\u003e \u003cp\u003eThe SCAS instruction 292\u003c\/p\u003e \u003cp\u003eScanning for multiple characters 293\u003c\/p\u003e \u003cp\u003eFinding a string length 295\u003c\/p\u003e \u003cp\u003eSummary 296\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 11: Using Functions 297\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eDefining Functions 297\u003c\/p\u003e \u003cp\u003eAssembly Functions 299\u003c\/p\u003e \u003cp\u003eWriting functions 299\u003c\/p\u003e \u003cp\u003eAccessing functions 302\u003c\/p\u003e \u003cp\u003eFunction placement 304\u003c\/p\u003e \u003cp\u003eUsing registers 304\u003c\/p\u003e \u003cp\u003eUsing global data 304\u003c\/p\u003e \u003cp\u003ePassing Data Values in C Style 306\u003c\/p\u003e \u003cp\u003eRevisiting the stack 306\u003c\/p\u003e \u003cp\u003ePassing function parameters on the stack 306\u003c\/p\u003e \u003cp\u003eFunction prologue and epilogue 308\u003c\/p\u003e \u003cp\u003eDefining local function data 309\u003c\/p\u003e \u003cp\u003eCleaning out the stack 312\u003c\/p\u003e \u003cp\u003eAn example 312\u003c\/p\u003e \u003cp\u003eWatching the stack in action 314\u003c\/p\u003e \u003cp\u003eUsing Separate Function Files 317\u003c\/p\u003e \u003cp\u003eCreating a separate function file 317\u003c\/p\u003e \u003cp\u003eCreating the executable file 318\u003c\/p\u003e \u003cp\u003eDebugging separate function files 319\u003c\/p\u003e \u003cp\u003eUsing Command-Line Parameters 320\u003c\/p\u003e \u003cp\u003eThe anatomy of a program 320\u003c\/p\u003e \u003cp\u003eAnalyzing the stack 321\u003c\/p\u003e \u003cp\u003eViewing command-line parameters 323\u003c\/p\u003e \u003cp\u003eViewing environment variables 325\u003c\/p\u003e \u003cp\u003eAn example using command-line parameters 326\u003c\/p\u003e \u003cp\u003eSummary 328\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 12: Using Linux System Calls 329\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Linux Kernel 329\u003c\/p\u003e \u003cp\u003eParts of the kernel 330\u003c\/p\u003e \u003cp\u003eLinux kernel version 336\u003c\/p\u003e \u003cp\u003eSystem Calls 337\u003c\/p\u003e \u003cp\u003eFinding system calls 337\u003c\/p\u003e \u003cp\u003eFinding system call definitions 338\u003c\/p\u003e \u003cp\u003eCommon system calls 339\u003c\/p\u003e \u003cp\u003eUsing System Calls 341\u003c\/p\u003e \u003cp\u003eThe system call format 341\u003c\/p\u003e \u003cp\u003eAdvanced System Call Return Values 346\u003c\/p\u003e \u003cp\u003eThe sysinfo system call 346\u003c\/p\u003e \u003cp\u003eUsing the return structure 347\u003c\/p\u003e \u003cp\u003eViewing the results 348\u003c\/p\u003e \u003cp\u003eTracing System Calls 349\u003c\/p\u003e \u003cp\u003eThe strace program 349\u003c\/p\u003e \u003cp\u003eAdvanced strace parameters 350\u003c\/p\u003e \u003cp\u003eWatching program system calls 351\u003c\/p\u003e \u003cp\u003eAttaching to a running program 353\u003c\/p\u003e \u003cp\u003eSystem Calls versus C Libraries 355\u003c\/p\u003e \u003cp\u003eThe C libraries 356\u003c\/p\u003e \u003cp\u003eTracing C functions 357\u003c\/p\u003e \u003cp\u003eComparing system calls and C libraries 358\u003c\/p\u003e \u003cp\u003eSummary 359\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 13: Using Inline Assembly 361\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat Is Inline Assembly? 361\u003c\/p\u003e \u003cp\u003eBasic Inline Assembly Code 365\u003c\/p\u003e \u003cp\u003eThe asm format 365\u003c\/p\u003e \u003cp\u003eUsing global C variables 367\u003c\/p\u003e \u003cp\u003eUsing the volatile modifier 369\u003c\/p\u003e \u003cp\u003eUsing an alternate keyword 369\u003c\/p\u003e \u003cp\u003eExtended ASM 370\u003c\/p\u003e \u003cp\u003eExtended ASM format 370\u003c\/p\u003e \u003cp\u003eSpecifying input and output values 370\u003c\/p\u003e \u003cp\u003eUsing registers 372\u003c\/p\u003e \u003cp\u003eUsing placeholders 373\u003c\/p\u003e \u003cp\u003eReferencing placeholders 376\u003c\/p\u003e \u003cp\u003eAlternative placeholders 377\u003c\/p\u003e \u003cp\u003eChanged registers list 377\u003c\/p\u003e \u003cp\u003eUsing memory locations 379\u003c\/p\u003e \u003cp\u003eUsing floating-point values 380\u003c\/p\u003e \u003cp\u003eHandling jumps 382\u003c\/p\u003e \u003cp\u003eUsing Inline Assembly Code 384\u003c\/p\u003e \u003cp\u003eWhat are macros? 384\u003c\/p\u003e \u003cp\u003eC macro functions 384\u003c\/p\u003e \u003cp\u003eCreating inline assembly macro functions 386\u003c\/p\u003e \u003cp\u003eSummary 387\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 14: Calling Assembly Libraries 389\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCreating Assembly Functions 389\u003c\/p\u003e \u003cp\u003eCompiling the C and Assembly Programs 391\u003c\/p\u003e \u003cp\u003eCompiling assembly source code files 392\u003c\/p\u003e \u003cp\u003eUsing assembly object code files 392\u003c\/p\u003e \u003cp\u003eThe executable file 393\u003c\/p\u003e \u003cp\u003eUsing Assembly Functions in C Programs 395\u003c\/p\u003e \u003cp\u003eUsing integer return values 396\u003c\/p\u003e \u003cp\u003eUsing string return values 397\u003c\/p\u003e \u003cp\u003eUsing floating-point return values 400\u003c\/p\u003e \u003cp\u003eUsing multiple input values 401\u003c\/p\u003e \u003cp\u003eUsing mixed data type input values 403\u003c\/p\u003e \u003cp\u003eUsing Assembly Functions in C++ Programs 407\u003c\/p\u003e \u003cp\u003eCreating Static Libraries 408\u003c\/p\u003e \u003cp\u003eWhat is a static library? 408\u003c\/p\u003e \u003cp\u003eThe ar command 409\u003c\/p\u003e \u003cp\u003eCreating a static library file 410\u003c\/p\u003e \u003cp\u003eCompiling with static libraries 412\u003c\/p\u003e \u003cp\u003eUsing Shared Libraries 412\u003c\/p\u003e \u003cp\u003eWhat are shared libraries? 412\u003c\/p\u003e \u003cp\u003eCreating a shared library 414\u003c\/p\u003e \u003cp\u003eCompiling with a shared library 414\u003c\/p\u003e \u003cp\u003eRunning programs that use shared libraries 415\u003c\/p\u003e \u003cp\u003eDebugging Assembly Functions 417\u003c\/p\u003e \u003cp\u003eDebugging C programs 417\u003c\/p\u003e \u003cp\u003eDebugging assembly functions 418\u003c\/p\u003e \u003cp\u003eSummary 420\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 15: Optimizing Routines 421\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eOptimized Compiler Code 421\u003c\/p\u003e \u003cp\u003eCompiler optimization level 1 422\u003c\/p\u003e \u003cp\u003eCompiler optimization level 2 423\u003c\/p\u003e \u003cp\u003eCompiler optimization level 3 425\u003c\/p\u003e \u003cp\u003eCreating Optimized Code 425\u003c\/p\u003e \u003cp\u003eGenerating the assembly language code 425\u003c\/p\u003e \u003cp\u003eViewing optimized code 429\u003c\/p\u003e \u003cp\u003eRecompiling the optimized code 429\u003c\/p\u003e \u003cp\u003eOptimization Tricks 430\u003c\/p\u003e \u003cp\u003eOptimizing calculations 430\u003c\/p\u003e \u003cp\u003eOptimizing variables 433\u003c\/p\u003e \u003cp\u003eOptimizing loops 437\u003c\/p\u003e \u003cp\u003eOptimizing conditional branches 442\u003c\/p\u003e \u003cp\u003eCommon subexpression elimination 447\u003c\/p\u003e \u003cp\u003eSummary 450\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 16: Using Files 453\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe File-Handling Sequence 453\u003c\/p\u003e \u003cp\u003eOpening and Closing Files 454\u003c\/p\u003e \u003cp\u003eAccess types 455\u003c\/p\u003e \u003cp\u003eUNIX permissions 456\u003c\/p\u003e \u003cp\u003eOpen file code 458\u003c\/p\u003e \u003cp\u003eOpen error return codes 459\u003c\/p\u003e \u003cp\u003eClosing files 460\u003c\/p\u003e \u003cp\u003eWriting to Files 460\u003c\/p\u003e \u003cp\u003eA simple write example 460\u003c\/p\u003e \u003cp\u003eChanging file access modes 462\u003c\/p\u003e \u003cp\u003eHandling file errors 462\u003c\/p\u003e \u003cp\u003eReading Files 463\u003c\/p\u003e \u003cp\u003eA simple read example 464\u003c\/p\u003e \u003cp\u003eA more complicated read example 465\u003c\/p\u003e \u003cp\u003eReading, Processing, and Writing Data 467\u003c\/p\u003e \u003cp\u003eMemory-Mapped Files 470\u003c\/p\u003e \u003cp\u003eWhat are memory-mapped files? 470\u003c\/p\u003e \u003cp\u003eThe mmap system call 471\u003c\/p\u003e \u003cp\u003emmap assembly language format 473\u003c\/p\u003e \u003cp\u003eAn mmap example 475\u003c\/p\u003e \u003cp\u003eSummary 479\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 17: Using Advanced IA-32 Features 481\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eA Brief Review of SIMD 481\u003c\/p\u003e \u003cp\u003eMMX 482\u003c\/p\u003e \u003cp\u003eSSE 483\u003c\/p\u003e \u003cp\u003eSSE2 483\u003c\/p\u003e \u003cp\u003eDetecting Supported SIMD Operations 483\u003c\/p\u003e \u003cp\u003eDetecting support 484\u003c\/p\u003e \u003cp\u003eSIMD feature program 485\u003c\/p\u003e \u003cp\u003eUsing MMX Instructions 487\u003c\/p\u003e \u003cp\u003eLoading and retrieving packed integer values 487\u003c\/p\u003e \u003cp\u003ePerforming MMX operations 488\u003c\/p\u003e \u003cp\u003eUsing SSE Instructions 497\u003c\/p\u003e \u003cp\u003eMoving data 498\u003c\/p\u003e \u003cp\u003eProcessing data 499\u003c\/p\u003e \u003cp\u003eUsing SSE2 Instructions 504\u003c\/p\u003e \u003cp\u003eMoving data 505\u003c\/p\u003e \u003cp\u003eProcessing data 505\u003c\/p\u003e \u003cp\u003eSSE3 Instructions 508\u003c\/p\u003e \u003cp\u003eSummary 508\u003c\/p\u003e \u003cp\u003eIndex 511\u003c\/p\u003e\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eSubject Areas: Computer programming \/ software development [\u003ca title=\"See our other books on Computer programming \/ software development\" href=\"https:\/\/freshlyprintedbooks.co.uk\/search?q=%22Computer%20programming%20\/%20software%20development%20%5BUM%5D%22\"\u003eUM\u003c\/a\u003e]\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\u003c\/font\u003e","brand":"Wrox","offers":[{"title":"Brand New","offer_id":52453401690392,"sku":"9780764579011","price":19.79,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0730\/2037\/5320\/files\/9780764579011.jpg?v=1785283926","url":"https:\/\/freshlyprintedbooks.co.uk\/products\/professional-assembly-language-paperback-softback-9780764579011","provider":"Freshly Printed Books","version":"1.0","type":"link"}