|
Assembly Language Programming in Linux
|
Assembly Language Programming in Linux
- Author:
- Sivarama P. Dandamudi
- Publisher:
- Springer
- Published:
- 2005
- Pages:
- 527
|
Assembly Language Programming in Linux, is a great guide to the
IA-32 instructions and Intel syntax based
NASM assembler on a Linux kernel based
system.
Assembly Language Programming in Linux, acts as both a good
introduction to assembly programming and as a reference
book. The only detraction from this well crafted book is the
guide on Linux distro usage, it is understandable that this
could be useful for an undergraduate only having to buy one
book, but there are better texts on using Linux distros and
for many it just is wasted space in a book of this nature
thankfully only 68 pages are devoted to Linux
installation.
Assembly Language Programming in Linux is laid out in a
very logical nature, as one would expect from a book on
assembly. Initially Assembly itself is introduced, then a
detailed look at computer architecture from a programmer's
perspective is given. Installation of Fedora Linux is then
examined, followed by NASM (Netwide Assembler) usage, basic and
advanced assembly language is covered and the appendices
include; Number Systems, Character Representation and the
IA-32 instruction set.
Assembly Language Programming in Linux Chapters
Assembly Language Programming in Linux Chapters
- Assembly Language
- Introduction
- What is Assembly Language?
- Advantages of High-Level Languages
- Why Program in Assembly Language?
- Typical Applications
- Summary
- Digital Logic Circuits
- Introduction
- Simple Logic Gates
- Logic Functions
- Deriving Logical Expressions
- Combintational Circuits
- Adders
- Programmable Logic Devices
- Arithmetic and Logic Units
- Seqeuntial Circuits
- Latches
- Flip-Flops
- Summary
- Memory Organization
- Introduction
- Basic Memory Operations
- Types of Memory
- Building a Memory Block
- Building Larger Memories
- Mapping Memory
- Storing Multibyte Data
- Alignment of Data
- Summary
- IA-32 Architecture
- Introduction
- Processor Execution Cycle
- Processor Registers
- Protected Mode Memory Architecture
- Real Mode Memory Architecture
- Midex-Mode Operation
- Which Segment Register to Use
- Input / Output
- Summary
- Installing Linux
- Production
- Partitioning Your Hard Disk
- Installing Fedora Core Linux
- Installing and Removing Software Packages
- Mounting Windows File System
- Summary
- Getting Help
- Using Linux
- Introduction
- Setting User Preferences
- System Settings
- Working with the GNOME Desktop
- Command Termina
- Getting Help
- Some General-Purpose Commands
- File System
- Access Permissions
- Redirection
- Pipes
- Editing Files with Vim
- Summary
- Installing and Using NASM
- Introduction
- Installing NASM
- Generating the Executable File
- Assembly Language Template
- Input / Output Routines
- An Example Program
- Assembling and Linking
- Summary
- Web Resources
- Debugging Assembly Language Programs
- Strategies to Debug Assembly Language Programs
- Preparing Your Program
- GNU debugger
- Data Display Debugger
- Summary
- A First Look at Assembly Language
- Introduction
- Data Allocation
- Where are the Operands
- Overview of Assembly Language Instructions
- Our First Program
- Illustrative Examples
- Summary
- More on Assembly Language
- Introduction
- Data Exchange and Translate Instructions
- Shift and Rotate Instructions
- Definiing Constants
- Macros
- Our First Program
- Illustrative Examples
- When to Use the XLAT Instruction
- Summary
- Writing Procedures
- Introduction
- What is a Stack?
- Implementation of the Stack
- Stack Operations
- Uses of the Stack
- Procedure Instructions
- Our First Program
- Parameter Passing
- Illustrative Examples
- Summary
- More on Procedures
- Introduction
- Local Variables
- Our First Program
- Multiple Source Program Modules
- Illustrative Examples
- Procedures with Variable Number of Parameters
- Summary
- Addressing Modes
- Introduction
- Memory Addressing Modes
- Arrays
- Our First Program
- Illustrative Examples
- Summary
- Arithmetic Instructions
- Introduction
- Status Flags
- Arithmetic instructions
- Our First Program
- Illustrative Examples
- Summary
- Conditional Execution
- Introduction
- Uncodnitional Jump
- Compare Instructions
- Conditional Jumps
- Looping Instructions
- Our First Program
- Illustrative Examples
- Indirect Jumps
- Summary
- Logical and Bit Operations
- Introduction
- Logical Instructions
- Shift Instructions
- Rotate Instructions
- Bit Instructions
- Our First Program
- Illustrative Examples
- Summary
- String Processing
- String Representation
- String Instructions
- Our First Program
- Illustrative Examples
- Testing String Procedures
- Summary
- ASCII and BCD Arithmetic
- Introduction
- Processing in ASCII Representation
- Our First Program
- Processing Packed BCD Numbers
- Illustrative Example
- Decimal Versus Binary Arithmetic
- Summary
- Recursion
- Introduction
- Our First Program
- Illustrative Examples
- Recursion Versus Iteration
- Summary
- Protected Mode Interrupt Processing
- Introduction
- A Taxonomy of Interrupts
- Interrupt Processing in the Protected Mode
- Exceptions
- Software Interrupts
- File I/O
- Our First Program
- Illustrative Examples
- Hardware Interrupts
- Direct Control of I/O Devices
- Summary
- High Level Language Interface
- Introduction
- Calling Assembly Procedures from C
- Our First Program
- Illustrative Examples
- Calling C Functions from Assembly
- Inline Assembly
- Summary
- Floating Point Operations
- Introduction
- Floating-Point Unit Organization
- Floating-Point Instructions
- Our First Program
- Illustrative Examples
- Summary
Assembly Language Programming in Linux Appendices
- Number Systems
- Positional Number Systems
- Conversion to Decimal
- Comversion from Decimal
- Binary / Octal / Hexadecimal Conversion
- Usigned Integers
- Signed Integers
- Floting-Point Representation
- Summary
- Character Representation
- Characeter Representation
- ASCII Character Set
- Programming Exercises
- IA-32 Instruction Set
- Instruction Format
- Selected Instructions
- Assembly Glossary
- Index
Assembly Language Programming in Linux, is written in a
clear style, with well drawn diagrams and screen shots
accurately guiding the reader simply through the various low
level concepts explored. The editor has done a good job in
bringing everything together and the index is very
usable.
A CD is bundled with the book, that contains a file called
io.mac. io.mac is used as an input output library, this
allows the book to explore more advanced concepts without
having to keep getting into the input and output structures
in assembly. Creating your own input and output functions is
a useful exercise in assembly coding and that information
can be quite easily found elsewhere though.
There aren't many books on NASM (the Netwide Assembler) so Assembly Language
Programming in Linux is a rare treasure. NASM uses the cleaner
Intel assembly syntax as opposed to the AT&T syntax that
is used in gas (GNU Assembler). NASM is always under
development, and is a good assembler to use for assembly
programs.
Assembly Language Programming in Linux overall is a good
read, very informative and well written and diagrammed. If
you are interested in assembly programming this makes a good
introduction and useful for further work, so I rate this
book quite highly, and give it 95%.
|
|