Other Sellers on Amazon
FREE Delivery. No Minimum order value for first order in this category Details
Order now and we'll deliver when available. We'll e-mail you with an estimated delivery date as soon as we have more information. Your account will only be charged when we dispatch the item.
& FREE Delivery
Modern X86 Assembly Language Programming: Covers x86 64-bit, AVX, AVX2, and AVX-512 Paperback – 7 December 2018
There is a newer edition of this item:
S$41.86
(58)
Usually dispatched within 2 to 3 days.
Enhance your purchase
Gain the fundamentals of x86 64-bit assembly language programming and focus on
the updated aspects of the x86 instruction set that are most relevant to application
software development. This book covers topics including x86 64-bit programming and
Advanced Vector Extensions (AVX) programming.
Â
The focus in this second edition is exclusively on 64-bit base programming architecture
and AVX programming. Modern X86 Assembly Language Programming’s structure and
sample code are designed to help you quickly understand x86 assembly language
programming and the computational capabilities of the x86 platform. After reading
and using this book, you’ll be able to code performance-enhancing functions andalgorithms using x86 64-bit assembly language and the AVX, AVX2 and AVX-512
instruction set extensions.
What You Will Learn
- Discover details of the x86 64-bit platform including its core architecture, data types,
- registers, memory addressing modes, and the basic instruction set
- Use the x86 64-bit instruction set to create performance-enhancing functions that
- are callable from a high-level language (C++)
- Employ x86 64-bit assembly language to efficiently manipulate common data types
- and programming constructs including integers, text strings, arrays, and structures
- Use the AVX instruction set to perform scalar floating-point arithmetic
- Exploit the AVX, AVX2, and AVX-512 instruction sets to significantly accelerate the
- performance of computationally-intense algorithms in problem domains such as
- image processing, computer graphics, mathematics, and statistics
- Apply various coding strategies and techniques to optimally exploit the x86 64-bit,
- AVX, AVX2, and AVX-512 instruction sets for maximum possible performance
Who This Book Is For Â
Software developers who want to learn how to write code using x86 64-bit assembly language. It’s also ideal for software developers who already have a basic understanding of x86 32-bit or 64-bit assembly language programming and are interested in learning how to exploit the SIMD capabilities of AVX, AVX2 and AVX-512.
- ISBN-101484240626
- ISBN-13978-1484240625
- Edition2nd ed.
- Publication date7 December 2018
- LanguageEnglish
- Print length604 pages
Frequently bought together
- +
- +
Customers who viewed this item also viewed
Product description
From the Back Cover
Gain the fundamentals of x86 assembly language programming and focus on the updated aspects of the x86 instruction set that are most relevant to application software development. This book covers topics including the new Advanced Vector Extensions (AVX) 512 programming, from the latest x86 instructions set, and the MMX technology and instruction set.
The focus in this second edition is exclusively on 64-bit base programming architecture and AVX programming. Modern X86 Assembly Language Programming's structure and sample code are designed to help you quickly understand x86 assembly language programming and the computational capabilities of the x86 platform. After reading and using this book, you'll be able to code performance-enhancing functions and algorithms using x86 64-bit assembly language and the AVX, AVX2 and AVX-512 instruction set extensions.
You will:
- Discover details of the x86 64-bit platform including its core architecture, data types, registers, memory addressing modes, and the basic instruction set
- Use the x86 64-bit instruction set to create performance-enhancing functions that are callable from a high-level language (C++)
- Employ x86 64-bit assembly language to efficiently manipulate common data types and programming constructs including integers, text strings, arrays, and structures
- Use the AVX instruction set to perform scalar floating-point arithmetic
- Exploit the AVX, AVX2, and AVX-512 instruction sets to significantly accelerate the performance of computationally-intense algorithms in problem domains such as image processing, computer graphics, mathematics, and statistics
- Apply various coding strategies and techniques to optimally exploit the x86 64-bit, AVX, AVX2, and AVX-512 instruction sets for maximum possible performance
About the Author
Product details
- Language : English
- Paperback : 604 pages
- ISBN-10 : 1484240626
- ISBN-13 : 978-1484240625
- Best Sellers Rank: 141,246 in Books (See Top 100 in Books)
- 174 in Algorithmic Programming
- 770 in Software Design, Testing & Engineering
- 1,409 in Computer Science
- Customer reviews:
Customer reviews
Top reviews from other countries

Position independent code is mentioned without explaining it.
LAHF/SAHF get mentioned without an explanation. Also the delightfully typo'd CUPID instruction appears in various places.
Tables also appear to have been brain dumped without thought for the end-user, such as in Table 1-10. This has no value as it stands.
Some stuff is over explain, some (rather too much) is under explained. Some just comes out of nowhere, such as zero in a register with XOR. Again, I know exactly why, but if this book is aimed at beginners then it must explain itself.
Also I would expect the registers could be given useful aliases by the assembler. I really got lost in some code because of this. Actual example
; Merge SPFP grayscale values into a single YMM register
vandps ymm4,ymm4,ymm15 ;mask out unneeded SPFP values
vandps ymm5,ymm5,ymm15
vandps ymm6,ymm6,ymm15
vandps ymm7,ymm7,ymm15
vpslldq ymm5,ymm5,4
vpslldq ymm6,ymm6,8
vpslldq ymm7,ymm7,12
vorps ymm0,ymm4,ymm5 ;merge values
vorps ymm1,ymm6,ymm7
vorps ymm2,ymm0,ymm1 ;ymm2 = 8 GS pixel values (SPFP)
That's frustrating and I presume unnecessary.
It's also really unhelpful to refer to 'volatile' without explaining this is not the same 'volatile' as used in C. Volatile here simply means you can trash them.
Also the code given is hugely verbose, quite unnecessarily so, and the description of what's going on (and bless the author, those descriptions are actually often quite reasonable) may be pages away from the code itself, so you have to flip back and forth between them.
As an example of code verbosity, a lot of it is taken up with output of results. Instead of using an old-fashioned printf() we get paragraphs of cout << ... Given that this is not a C++ tutorial, this
cout << "min_vals1: ";
cout << setw(4) << (int)min_vals1[0] << ' ';
cout << setw(4) << (int)min_vals1[1] << ' ';
cout << setw(4) << (int)min_vals1[2] << '\n';
cout << "min_vals2: ";
cout << setw(4) << (int)min_vals2[0] << ' ';
cout << setw(4) << (int)min_vals2[1] << ' ';
cout << setw(4) << (int)min_vals2[2] << "\n\n";
cout << "max_vals1: ";
cout << setw(4) << (int)max_vals1[0] << ' ';
cout << setw(4) << (int)max_vals1[1] << ' ';
cout << setw(4) << (int)max_vals1[2] << '\n';
cout << "max_vals2: ";
cout << setw(4) << (int)max_vals2[0] << ' ';
cout << setw(4) << (int)max_vals2[1] << ' ';
cout << setw(4) << (int)max_vals2[2] << "\n\n";
is not remotely helpful.
There are too many unhelpful brain dumps which don't recognise the beginners are going to get confused by them. Fortunately I'm not a beginner.
The book winds up by giving a very brief overview of AVX512, too little to be of use really.
As others have said, compiler intrinsics are not mentioned. While the book didn't actually promise them, they would have been very welcome to have.
The explanations aren't actually too bad, the code is questionable in its presentation, it's hugely verbose. I came rather close to sending it back but in the end decided to stick with it.
Not recommended.
Added later : I really, really wish for a rationale for a lot of things. There are instructions for what seem to be bitwise and'ing and or'ing of floats. Bitwise ops for floats has almost no rational interpretation I can find (something to do with NaNs perhaps?).
Also type punning is used freely to interface the C++ data structures to the SIMD ASM. As type punning is illegal in C++ as far as I know, some discussion on this is needed, but there's none.



