Programming from the Ground Up By Jonathan Bartlett (326 pages) Programming from the Ground Up is an introductory book to programming and computer science using assembly language. It teaches assembly language for x86 processors and Linux. It assumes the reader has never programmed before, and introduces the concepts of variables, functions, and flow control. The reason for using assembly language is to get the reader thinking in terms of how the computer actually works underneath. Knowing how the computer works from a “bare-metal” standpoint is often the difference between top-level programmers and programmers who can never quite master their art. This book should teach the reader to understand how a program works and interacts with other programs, be able to read programmers’ code and learn how they work, to learn new programming languages quickly, and also to learn advanced concept in computer science quickly. The book includes review exercises at the end of each chapter. Chapters cover: Introduction

Computer Architecture – structure of computer memory, the CPU, interpreting memory, and data accessing methods

Your First Programs – teaches the reader the process for writing and building Linux assembly-language programs, the structure of assembly-language programs, and a few assembly-language commands

All About Functions – looks at how functions work, assembly-language functions using the C calling convention, and recursive functions

Dealing with Files – the UNIX file concept, buffers and .bss, standard and special files, and using files in a program

Reading and Writing Simple Records – deals with reading and writing simple fixed-length records

Developing Robust Programs – deals with developing programs that handle error conditions gracefully. This is known as robust programs

Sharing Functions with Code Libraries – using a shared library, how shared libraries work, finding information about libraries, useful functions, and building a shared library

Intermediate Memory Topics – how a computer views memory, the memory layout of a Linux program, getting more memory, a simple memory manager, and more

Counting Like a Computer

High Level Languages – looks at a “real-world” programming language

Optimization – focuses on speed optimization

Moving on from Here

Appendices Permission is granted to copy, distribute and/or modify the book under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation.