Code Monkey home page Code Monkey logo

asm_book's Introduction

A Gentle Introduction to Assembly Language Programming

This textbook provides a gentle introduction to assembly language programming. What makes this introduction "gentle" is that it assumes the reader is already comfortable with C or C++ coding. We use this assumed knowledge to bridge backward towards the low level ISA (Instruction Set Architecture).

We drive home a very sharp point: C is a high level assembly language and assembly language is nothing to be scared about.

For Whom Is This Book Intended?

As mentioned, if you are already familiar with C (or languages descended from C such as C++), this book begins with what you already know. Later chapters dive more deeply into the corners and recesses of the ARM V8 ISA and are suitable for those wishing to master the rich instruction set of the 64 bit ARM processors.

Can This Book Be Used In Courses Covering Assembly Language?

Yes, absolutely.

In fact, we would argue that the study of assembly language is extremely important to the building of competent software engineers. Further, we would argue that teaching the x86 instruction set is cruel as that ISA was born in the 1970s and has simply gotten more muddled with age.

The MIPS instruction set is another ISA that is often covered in College level courses. While kinder and gentler than the x86 ISA, the MIPS processor isn't nearly as relevant as the ARM family. Phones, tablets, laptops and even desktops contain ARM V8 processors making the study of the ARM ISA far more topical. Perhaps even more "cool".

Calling Convention Used In This Book

Assembly language programming is quite closely dependent upon the underlying hardware architecture. The host operating environment plays an outsized role in determining how assembly language programs are constructed. A "calling convention" refers to how functions are called and how parameters are passed.

In this book we will use the ARM LINUX conventions. This means:

  • You will need to run a ARM Linux VM on the Macintosh - even on ARM-based Macs. Why? Apple. That's why.

  • You will need to run WSL (Windows Subsystem for Linux) on ARM-based Windows machines. These do exist!

  • You will need to run an ARM Linux VM on x86-based Windows machines.

A Lot of Names

As commendable as the ARM designs are, ARM's naming conventions for their Intellectual Properties are horrid. In this book, AARCH64 and ARM V8 are taken to be synonyms for the 64 bit ARM Instruction Set Architecture (ISA).

It is very difficult to find documentation at the ARM site because they have so many versions, so many names for the same thing and so much documentation in general. It really can be maddening.

Within the text we will provide germane links as appropriate.

Here is a link to "a" main instruction set page.

Section 1 - Bridging from C / C++ to Assembly Language

We start by providing what we're calling "bridging" from C and C++ to assembly language. We use the knowledge you already have to learn new knowledge - how cool is that!

Chapter Content
1 Hello World
2 If Statements
3 Loops
.... a .... While Loops
.... b .... For Loops
.... c .... Implementing Continue
.... d .... Implementing Break
4 Interludes
.... a .... Registers
.... b .... Load and Store
.... c .... More About ldr
.... d .... Register Sizes
5 switch
6 Functions
.... a .... Calling and Returning
.... b .... Passing Parameters
.... c .... Calling common C runtime functions
7 FizzBuzz - a Complete Program
8 Structs
.... a .... Alignment
.... b .... Defining
.... c .... Using
9 const
10 Casting

Section 2 - Floating Point

Floating point operations use their own instructions and their own set of registers. Therefore, floating point operations are covered in their own section:

Chapter Content
1 Floating Point
.... a .... What Are Floating Point Numbers?
.... b .... Registers (simplified)
.... c .... Literals
.... d .... fmov Not Yet Written
.... e .... Conversion To / From Integers
.... f .... Four Basic Operations Not Yet Written
.... g .... Selected Additional Operations Not Yet Written
.... z .... Half Precision Floats

Section 3 - Bit Manipulation

What would a book about assembly language be without bit bashing?

Chapter Content
1 Bit Fields
.... a .... Without Bit Fields
.... b .... With Bit Fields
.... c .... Review of Newly Described Instructions

Section 4 - More Stuff

Chapter Content
--- Determining string literal lengths for C functions

Projects

Here are some project specifications to offer a challenge to your growing mastery.

The DIRENT project demonstrates how a complex struct can be used in assembly language.

About The Author

Perry Kivolowitz's career in the Computer Sciences spans just under five decades. He launched more than 5 companies, mostly relating to hardware, image processing and visual effects (for motion pictures and television). Perry received Emmy recognition for his work on the The Gathering, the pilot episode of Babylon 5. Later he received an Emmy Award for Engineering along with his colleagues at SilhouetteFX, LLC. SilhouetteFX is used in almost every significant motion picture for rotoscoping, paint, tracking, 2D to 3D reconstruction, compositing and more.

In 1996 Perry received an Academy Award for Scientific and Technical Achievement for his invention of Shape Driven Warping and Morphing. This is the technique responsible for many of the famous effects in Forrest Gump, Titanic and Stargate.

Twenty twenty two marks Perry's 18th year teaching Computer Science at the college level, ten years at the UW Madison and now 8 at Carthage College.

Assembly language is a passion for Perry having worked in the following ISAs:

  • Univac 1100

  • Digital Equipment Corporation PDP-11

  • Digital Equipment Corporation VAX-11

  • Motorola 68000

  • ARM beginning with AARCH64

This work is dedicated to my wife Sara and sons Ian and Evan.

Gratuitous Plug

Perry has created a library of about 200 programming projects suitable for CS 1, CS 2, Data Structures, Networking, Operating Systems and Computer Organization classes. If a publisher of CS text books be interested in purchasing the library, please reach out.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.