0%

Book Description

ARM 64-Bit Assembly Language carefully explains the concepts of assembly language programming, slowly building from simple examples towards complex programming on bare-metal embedded systems. Considerable emphasis is put on showing how to develop good, structured assembly code. More advanced topics such as fixed and floating point mathematics, optimization and the ARM VFP and NEON extensions are also covered. This book will help readers understand representations of, and arithmetic operations on, integral and real numbers in any base, giving them a basic understanding of processor architectures, instruction sets, and more.

This resource provides an ideal introduction to the principles of 64-bit ARM assembly programming for both the professional engineer and computer engineering student, as well as the dedicated hobbyist with a 64-bit ARM-based computer.

  • Represents the first true 64-bit ARM textbook
  • Covers advanced topics such as fixed and floating point mathematics, optimization and ARM NEON
  • Uses standard, free open-source tools rather than expensive proprietary tools
  • Provides concepts that are illustrated and reinforced with a large number of tested and debugged assembly and C source listings

Table of Contents

  1. Cover image
  2. Title page
  3. Table of Contents
  4. Copyright
  5. List of tables
  6. List of figures
  7. Preface
    1. Choice of processor family
    2. General approach
  8. Chapter 1: Introduction
    1. Abstract
    2. 1.1. Reasons to learn assembly
    3. 1.2. The ARM processor
    4. 1.3. Computer data
    5. 1.4. Memory layout of an executing program
    6. 1.5. Chapter summary
    7. Exercises
  9. Chapter 2: GNU assembly syntax
    1. Abstract
    2. 2.1. Structure of an assembly program
    3. 2.2. What the assembler does
    4. 2.3. GNU assembly directives
    5. 2.4. Chapter summary
    6. Exercises
  10. Chapter 3: Load/store and branch instructions
    1. Abstract
    2. 3.1. CPU components and data paths
    3. 3.2. AArch64 user registers
    4. 3.3. Instruction components
    5. 3.4. Load and store instructions
    6. 3.5. Branch instructions
    7. 3.6. Chapter summary
    8. Exercises
  11. Chapter 4: Data processing and other instructions
    1. Abstract
    2. 4.1. Operand2
    3. 4.2. Data processing instructions
    4. 4.3. Special instructions
    5. 4.4. Alphabetized list of AArch64 instructions
    6. 4.5. Chapter summary
    7. Exercises
  12. Chapter 5: Structured programming
    1. Abstract
    2. 5.1. Sequencing
    3. 5.2. Selection
    4. 5.3. Iteration
    5. 5.4. Subroutines
    6. 5.5. Aggregate data types
    7. 5.6. Chapter summary
    8. Exercises
  13. Chapter 6: Abstract data types
    1. Abstract
    2. 6.1. ADTs in assembly language
    3. 6.2. Word frequency counts
    4. 6.3. Ethics case study: Therac-25
    5. 6.4. Chapter summary
    6. Exercises
  14. Chapter 7: Integer mathematics
    1. Abstract
    2. 7.1. Subtraction by addition
    3. 7.2. Binary multiplication
    4. 7.3. Binary division
    5. 7.4. Big integer ADT
    6. 7.5. Chapter summary
    7. Exercises
  15. Chapter 8: Non-integral mathematics
    1. Abstract
    2. 8.1. Base conversion of fractional numbers
    3. 8.2. Fractions and bases
    4. 8.3. Fixed point numbers
    5. 8.4. Fixed point operations
    6. 8.5. Fixed point input and output
    7. 8.6. Computing sine and cosine
    8. 8.7. Floating point numbers
    9. 8.8. Floating point operations
    10. 8.9. Ethics case study: patriot missile failure
    11. 8.10. Chapter summary
    12. Exercises
  16. Chapter 9: Floating point
    1. Abstract
    2. 9.1. Floating point overview
    3. 9.2. Register usage rules
    4. 9.3. Floating point control and status registers
    5. 9.4. Load/store instructions
    6. 9.5. Data movement instructions
    7. 9.6. Data conversion instructions
    8. 9.7. Data processing instructions
    9. 9.8. Floating point sine function
    10. 9.9. Alphabetized list of FP/NEON instructions
    11. 9.10. Chapter summary
    12. Exercises
  17. Chapter 10: Advanced SIMD instructions
    1. Abstract
    2. 10.1. Instruction syntax
    3. 10.2. Load and store instructions
    4. 10.3. Data movement instructions
    5. 10.4. Data conversion
    6. 10.5. Bitwise logical operations
    7. 10.6. Basic arithmetic instructions
    8. 10.7. Multiplication and division
    9. 10.8. Shift instructions
    10. 10.9. Unary arithmetic
    11. 10.10. Vector reduce instructions
    12. 10.11. Comparison operations
    13. 10.12. Performance mathematics: a final look at sine
    14. 10.13. Alphabetized list of advanced SIMD instructions
    15. 10.14. Advanced SIMD intrinsics
    16. 10.15. Chapter summary
    17. Exercises
  18. Chapter 11: Devices
    1. Abstract
    2. 11.1. Accessing devices directly under Linux
    3. 11.2. General purpose digital input/output
    4. 11.3. Pulse modulation
    5. 11.4. Common system devices
    6. 11.5. Serial communications
    7. 11.6. Chapter summary
    8. Exercises
  19. Chapter 12: Running without an operating system
    1. Abstract
    2. 12.1. Exception processing
    3. 12.2. AArch64 execution and exception states
    4. 12.3. AArch64 vector table
    5. 12.4. The boot process
    6. 12.5. Writing a bare metal program
    7. 12.6. Using an interrupt
    8. 12.7. ARM processor profiles
    9. 12.8. Chapter summary
    10. Exercises
  20. Index
18.117.196.184