ARM Assembly Language Programming

By Peter Knaggs and Stephen Welsh
Broadly speaking, you can divide the history of computers into four periods: the mainframe, the mini, the microprocessor, and the modern post-micoprocessor. The Mainframe era was chaterrized by computers that required large buildings and teams of technicians and operators to keep them going. More often than not, both academics and students had little direct contact with the mainframe - you handed a deck of punched cards to an operator and waited for the ouput to appear hours later. During the mainframe era, academics concentrated on languages and compilers, algorithms, and operating systems.
The minicomputer era put computers in the hands of students and academics, because university departments could now buy their own minis. As minicomputers were not as complex as mainframes and because students could get direct hands-on experience, many departments of computer science and electronic engineering taught students how to program in the native language of the computer - assembly language. In those days, the mid 1970s, assembly language programming was used to teach both the control of I/O devices, and the writing of programs. The explosion of computer software had not taken place, and if you wanted software you had to write it yourself.
The late 1970s saw the introduction of the Microprocessor. For the first time, each student was able to access a real computer. Unfortunately, microprocessors appeared before the introduction of low-cost memory (both primary and secondary). Students had to program microprocessors in assembly langauge because the only storage mechanicsm was often a ROM with just enough capacity to hold a simple single pass assembler.
The advent of the low-cost microprocessor system ensured that virtually every student took a course on assembly language. Even today, most courses in computer science include a module on computer architecture and organization, and teaching students to write programs in assembly language forces them to understand the computer's architecture. However, some computer scientist who had been educated during the mainframe era were unhappy with the microprocessor, because they felt that the 8 bit microprocessor was a retrograde step - its architecture was far more primitive that the mainframes they had studied in the 1960s....
Read More/Download

Embedded System Design: A Unified Hardware/Software Introduction

By Frank Vahid and Tony Givargis
Embedded computing systems have grown tremendously in recent years, not only in their popularity, but also in their complexity. This complexity demands a new type of designer, one who can easily cross the traditional border between hardware design and software design. After investigating the availability of courses and textbooks, we felt a new course and accompanying textbook were necessary to introduce embedded computing system design using a unified view of software and hardware. This textbook portrays hardware and software not as different domains, but rather as two implementation options along a continuum of options varying in their design metrics, like cost, performance, power, size, and flexibility. Three important trends have made such a unified view possible. First, integrated circuit (IC) capacities have increased to the point that both software processors and custom hardware processors now commonly coexist on a single IC. Second, quality compilers and program size increases have led to the common use of processor-independent C, C++, and Java compilers and integrated design environments (IDEs) in embedded system design, significantly decreasing the importance of the focus on microprocessor internals and assembly language programming that dominate most existing embedded system courses and textbooks. Third, synthesis technology has advanced to the point that synthesis tools have become commonplace in the design of digital hardware. Synthesis tools achieve nearly the same for hardware design as compilers achieve in software design: They allow the designer to describe desired functionality in a high-level programming language, and they then automatically generate an efficient custom-hardware processor implementation. The first trend makes the past separation of software and hardware design nearly impossible. Fortunately, the second and third trends enable their unified design, by turning embedded system design, at its highest level, into the problem of selecting and programming (for software), designing (for hardware), and integrating “processors.”
The first four chapters of this book strive to achieve the goal of presenting hardware and software in a unified way. These chapters stress that computations are carried out by processors. Many types of processors are available, including general-purpose processors (software), custom single-purpose processors (hardware), standard single-purpose processors
(peripherals), and so on. But nevertheless, they are all just processors, differing in their cost, power, performance, design time, flexibility, and so on, but essentially doing the same thing. Chapter 1 provides an overview of embedded systems and their design challenges. We introduce custom single-purpose processors in Chapter 2, emphasizing a top-down technique to digital design amenable to synthesis, picking up where many textbooks on digital design leave off. We introduce general-purpose processors and their use in Chapter 3, expecting this chapter to be mostly review for many readers, and ending by showing how to design a general-purpose processor using the techniques of Chapter 2. Chapter 4 describes numerous
standard single-purpose processors (peripherals) common in embedded systems. Chapters 5 and 6 introduce memories and interfacing concepts, respectively, to complete the fundamental knowledge necessary to build basic embedded systems. Chapter 7 provides a digital camera example, showing how we can trade off among hardware, software, and peripherals to achieve implementations that vary in their power, performance, and size. These seven chapters form the core of this book.
Freed from the necessity of covering the nitty-gritty details of a particular microprocessor’s internals and assembly language programming, this book includes coverage of some additional embedded systems topics. Chapter 8 describes advanced state machine computation models that are becoming popular when describing complex embedded system behavior. It also introduces the concurrent process model and real-time systems. Chapter 9 gives a basic introduction to control systems, enough to make students aware that a rich theory exists for control systems, and to enable students to determine when an embedded system is an example of a control system. Chapter 10 introduces a variety of popular IC technologies, from which a designer may choose for system implementation. Finally, Chapter 11 highlights various design technologies for building embedded systems, including discussion of hardware/software codesign, a user's introduction to synthesis (from behavioral down to logic levels), and the major trend toward design based on intellectual property (IP).

Read More/Download

The Prehistory of the Digital Computer, From Relays to the Stored Program Concept, 1935-1945

The Prehistory of the Digital Computer, From Relays to the Stored Program Concept, 1935-1945 is written by Paul E. Ceruzzi.
Preface of this Book

The modern digital computer was invented between 1935 and 1945. That was the decade when the first machines that could be called true digital computers were put together. This book tells the story of that invention by looking at specific events of the 1930's and 1940's that show the computer taking its modern form.
Before 1935 there were machines that could perform calculations or otherwise manipulate information, but they were neither automatic nor general in capabilities. They were not computers. In the 1930's the word computer meant a human being who calculated with the aid of a calculating machine. After 1945 the word meant a machine which did that. From that time on computers have continued to evolve and improve, becoming dramatically cheaper and smaller, but their de- sign has not really changed. So the story of what happened in that ten-year period will reveal quite a bit of the entire history of the computer as it is known today.
I have chosen four projects from that era that best illustrate how the computer was invented. These are by no means all that happened, but they are representative of the kinds of activities going on.
The first is the set of electromechanical computers built in Germany by Konrad Zuse, who because of the war had no knowledge of similar activities in America and England. His independent line of work makes for an interesting and self- contained case study of just how one goes about building a computer from scratch.
The second is the Harvard Mark I, built by Professor Howard Aiken and first shown to the public in 1944. This machine was one of the first truly large-scale projects, and because it was well publicized it served notice to the world that the computer age had dawned.
The third project is the series of relay computers built by George Stibitz of the Bell Telephone Laboratories between 1939 and 1946. These machines represented the best that could be done with electromechanical devices (telephone relays), and as such mark the end of that phase of invention and the beginning of another.
The final project is the ENIAC, the world's first working electronic numerical computer, using vacuum tubes for its computing elements, and operating at the speed of light. With its completion in late 1945 all of the pieces of the modern computer were present:
  • automatic control,
  • internal storage of information,
  • and very high speed.
What remained to be done after 1945 was to put those pieces together in a practical and coherent way. From the experience of building and using those machines there came a notion of what a computer ought to look like. The old definition of a computer gave way to the modern one: a machine capable of manipulating and storing many types of information at high speeds and in a general and flexible way. How this notion came about, and especially why the notion of storing the computer's program of instructions in the same internal memory as its data gained favor, are also examined.
This book has a dual purpose. The first is to recount the history of the computer, emphasizing the crucial decade between 1935 and 1945 but including earlier events and more recent trends as well. The second is to explain in simple terms the fundamentals of how those computers worked. Computing has certainly changed since 1945, but the basic concepts have not; I feel that it is easier to grasp these concepts as they were present in earlier, slower, and much simpler computers. I have included brief explanations of some of these concepts in the text of the book; a glossary at the end gives short definitions of many terms of modern computing jargon.
That the computer is having a profound effect on modern life is hardly at issue. Just how and why such a profound change in our society is happening because of computers can better be understood with a grasp of how this technology emerged.
I wish to thank the following persons and institutions for their help with the researching and writing of this book: the Society for Mathematics and Data Processing, Bonn; the Charles Babbage Institute, Minneapolis; the Linda Hall Library, Kansas City, Mo.; the Baker Library, Dartmouth College; and Professors Jerry Stannard, Walter Sedelow, and Forrest Berghom of the University of Kansas. Konrad Zuse, Helmut Schreyer, and George Stibitz supplied me with personal archival materials and criticized portions of the manuscript. I also wish to thank Bill Aspray, Gwen Bell, and Nancy Stern, who also read portions of the manuscript and gave me helpful advice. Any errors or statements of opinion are of course my own.
Read More/Download

Popular Posts