Book Image

Computer Architecture with Python and ARM

By : Alan Clements
Book Image

Computer Architecture with Python and ARM

By: Alan Clements

Overview of this book

This comprehensive guide offers a unique and immersive learning experience by combining Python programming with ARM architecture. Starting with an introduction to computer architecture and the flow of data within a computer system, you’ll progress to building your own interpreter using Python. You’ll see how this foundation enables the simulation of computer operations and learn ways to enhance a simulator by adding new instructions and displaying improved results. As you advance, you’ll explore the TC1 Assembler and Simulator Program to gain insights into instruction analysis and explore practical examples of simulators. This will help you build essential skills in understanding complex computer instructions, strengthening your grasp of computer architecture. Moreover, you’ll be introduced to the Raspberry Pi operating system, preparing you to delve into the detailed language of the ARM computer. This includes exploring the ARM instruction set architecture, data-processing instructions, subroutines, and the stack. With clear explanations, practical examples, and coding exercises, this resource will enable you to design and construct your own computer simulator, simulate assembly language programs, and leverage the Raspberry Pi for ARM programming.
Table of Contents (18 chapters)
1
Part 1: Using Python to Simulate a Computer
Free Chapter
2
Chapter 1: From Finite State Machines to Computers
10
Part 2: Using Raspberry Pi to Study a Real Computer Architecture

Decoding and executing an instruction

In this section, we’ll look at a few examples of how instructions are encoded and decoded. Consider the ADD r1,r2,r3, operation (where the codes for registers rD, rS1, and rS2 are shaded), which is defined in RTL as follows:

[r1] [r2] + [r3]

Table 4.2 shows that the encoding of ADD r1,r2,r3 is 10 00000 001 010 011 0000000000000000. The corresponding 4-bit format code that defines the registers to be used is 1110 because we use three registers and no literal field (remember that this 4-bit format code is not part of the opcode but is used by the assembler to interpret the instruction).

The following Python code shows how we can decode an instruction to extract five variables: the operation code (binOp); the three registers, rD, rS1, and rS2; and a literal. Decoding is performed by shifting the bits of the instruction right to move the required field into the least significant position and then ANDing it with a mask to remove...