Computing Reviews
Today's Issue Hot Topics Search Browse Recommended My Account Log In
Review Help
Search
Modern x86 assembly language programming : 32-bit, 64-bit, SSE, and AVX
Kusswurm D., Apress, New York, NY, 2014. 700 pp. Type: Book (978-1-484200-65-0)
Date Reviewed: Dec 8 2015

Many programming books try too hard to be all things to all people. They range from introductory material to far-flung tangential topics, leaving most readers to search for relevant information somewhere along that spectrum. This book is aimed at the “beginner to intermediate” level of reader. It will be of benefit to experienced programmers who are looking for either an introduction or a reintroduction to modern assembly language programming on the x86 platform. The later chapters will be of particular benefit to those who have used assembly language in the past but need an introduction to newer features like x86 streaming single-instruction-multiple-data extensions (x86-SSE) and advanced vector extensions (AVX). Other books exist that focus on different integrated development environments (IDEs) and operating system platforms [1,2].

The book opens with two chapters on x86-32 core architecture and programming. These chapters include a brief historical overview of the evolution of x86 architecture, as well as a helpful reference to data types and important elements of the x86-32 instruction set. The second chapter delves into details of writing basic assembly language programs, including calling conventions, memory addressing modes, and interacting with structures, strings, and arrays. These first chapters provide more introductory material, though they are well written and worth perusing even for more experienced programmers.

Chapters 3 and 4 cover x87 floating-point unit (FPU) architecture and programming. While this may seem unnecessary due to the introduction of more advanced capabilities of x86-SSE, the author gives a number of reasons for the inclusion of these chapters. Among others, the need to understand legacy code and the rise of ultra-low power microarchitectures that do not support x86-SSE are compelling reasons for knowing the material in these chapters.

The following 12 chapters focus on the single-instruction, multiple-data (SIMD) features of the x86 platform. Chapters 5 and 6 cover MMX, the x86 platform’s first SIMD instruction set enhancement. This material is foundational to understanding the x86-SSE covered in chapters 7 through 11, as it includes an introduction to SIMD processing and programming operations. The subsequent chapters cover x86-SSE, which is the successor to MMX technology, in detail. Chapter 7 introduces x86-SSE data types and instruction set extensions. The subsequent chapters cover operations on different data types, including sample programs for each. Chapter 8 covers scalar floating-point programming. Chapters 9 through 11 cover packed floating-point, packed integer, and text string operations, respectively.

Chapters 12 through 16 cover the latest extension to x86 SIMD, x86 x86-AVX. These chapters follow the same pattern as the x86-SSE material. Chapter 12 covers the history and general discussion of x86-AVX. Chapters 13 through 15 cover scalar floating-point, packed floating-point, and packed integer, respectively. Chapter 16 covers new instructions introduced with x86-AVX and includes sample code illustrating how to detect processor support for instruction set extensions, exploiting x86-AVX data manipulation instructions, and other useful general-purpose details.

Chapters 17 through 20 cover x86-64 core architecture and programming, including x86-SSE and x86-AVX programming in an x86-64 environment. These chapters rely on the material introduced earlier in the book, so without a thorough understanding of x86-32 architecture and programming introduced earlier in the book, this material will be less accessible. These chapters are broken down into core architecture and programming concepts, followed by SIMD architecture and programming.

The last two chapters of the book provide an introduction to more advanced concepts in assembly language programming. These include an overview of processor architecture and techniques for optimizing the performance of assembly language programs. The author also includes an introduction to non-temporal memory stores and an overview of x86 data prefetch instructions, with sample programs illustrating their usefulness.

The book does mention some helpful resources that are relegated to three appendices, which are not included in the print version. These appendices are included in the source code download zip file from the Apress website, though the publisher did not make that clear in the book or on the website. Most of the material in the appendices is summary-level information embedded elsewhere in the book. The third appendix in particular, “References and Resources,” will be helpful in follow-up study of the material in this book.

Overall, this is a very well-written book that is worth the investment required to read it all the way through. The material is also very well organized, so that it will prove useful as a reference alongside more technical reference material available from Intel [3].

More reviews about this item: Amazon

Reviewer:  Nathan Carlson Review #: CR144000 (1602-0084)
1) Seyfarth, R. Introduction to 64 bit assembly programming for Linux and OS X. CreateSpace Independent Publishing Platform, North Charleston, SC, 2014.
2) Irvine, K. Assembly language for x86 processors. Pearson, New York, NY, 2014.
3) http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html (11/24/2015).
Bookmark and Share
  Reviewer Selected
 
 
Intel 80x86 (C.5.3 ... )
 
 
Intel Assembly Language (D.3.2 ... )
 
 
Language Classifications (D.3.2 )
 
 
Microcomputers (C.5.3 )
 
 
Reference (A.2 )
 
Would you recommend this review?
yes
no
Other reviews under "Intel 80x86": Date
80x86 architecture and programming (vol. II)
Agarwal R., Prentice-Hall, Inc., Upper Saddle River, NJ, 1991. Type: Book (9780132454322)
Jun 1 1992
An Analysis of the Intel 80W86 Security Architecture and Implementations
Sibert O., Porras P., Lindell R. IEEE Transactions on Software Engineering 22(5): 283-293, 1996. Type: Article
Mar 1 1997

E-Mail This Printer-Friendly
Send Your Comments
Contact Us
Reproduction in whole or in part without permission is prohibited.   Copyright 1999-2024 ThinkLoud®
Terms of Use
| Privacy Policy