Explain the
instruction sets and condition codes of ARM processor with an example for each.
ARM is
actually a family of RISC architectures that have been developed over many
years. ARM does not manufacture its own VLSI devices; rather, it licenses its
architecture to companies who either manufacture the CPU itself or integrate
theARM processor into a larger system.
The
textual description of instructions, as opposed to their binary representation,
is called an assembly language. ARM instructions are written one per line,
starting after the first column. Comments begin with a semicolon and continue
to the end of the line. A label, which gives a name to a memory location, comes
at the beginning of the line, starting in the first column. Here is an example:
LDR
r0,[r8]; a comment
label
ADD r4,r0,r1
Ø Processor
and Memory Organization
Different versions of the ARM architecture are identified by
different numbers. ARM7 is a von Neumann architecture machine, while ARM9 uses
Harvard architecture. However, this difference is invisible to the assembly
language programmer, except for possible performance differences. The ARM
architecture supports two basic types of data:
ü
The standard ARM word is 32 bits long.
ü
The word may be divided into four 8-bit bytes.
ARM7 allows addresses up to 32 bits long. An address refers to a
byte, not a word. Therefore, the word 0 in the ARM address space is at location
0, the word 1 is at 4, the word 2 is at 8, and so on. (As a result, the PC is
incremented by 4 in the absence of a branch.) The ARM processor can be
configured at power-up to address the bytes in a word in either little-endian
mode (with the lowest-order byte residing in the low-order bits of the
word) or big-endian mode (the lowest-order byte stored in the
highest bits of the word). General purpose computers have sophisticated
instruction sets. Some of this sophistication is required simply to provide the
functionality of a general computer, while other aspects of instruction sets
may be provided to increase performance, reduce code size, or otherwise improve
program characteristics.
Byte
organization within an ARM word
Ø Data Operations
Arithmetic
and logical operations in C are performed in variables. Variables are
implemented as memory locations. Therefore, to be able to write instructions to
perform C expressions and assignments, we must consider both arithmetic and
logical instructions as well as instructions for reading and writing memory.
Let us
consider sample fragment of C code with data declarations and several
assignment statements. The variables a, b, c, x, y, and z all become data
locations in memory. In most cases data are kept relatively separate from
instructions in the program’s memory image.
In the
ARM processor, arithmetic and logical operations cannot be performed directly
on memory locations. While some processors allow such operations to directly
reference main memory, ARM is load-store architecture. Data operands must first
be loaded into the CPU and then stored back to main memory to save the results.
Figure 2.8 shows the registers in the basic ARM programming model. ARM has 16
general-purpose registers, r0 through r15. Except for r15, they are identical.
Any operation that can be done on one of them can be done on the other one
also. The r15 register has the same capabilities as the other registers, but it
is also used as the program counter. The program counter should of course not
be overwritten for use in data operations. However, giving the PC the properties
of a general-purpose register allows the program counter value to be used as an
operand in computations, which can make certain programming tasks easier.
The
other important basic register in the programming model is the current program
status register (CPSR). This register is set automatically during every
arithmetic, logical, or shifting operation. The top four bits of the CPSR hold
the following useful information about the results of that arithmetic/logical
operation:
ü The
negative (N) bit is set when the result is negative in two’s-complement
arithmetic.
ü The zero
(Z) bit is set when every bit of the result is zero.
ü The
carry (C) bit is set when there is a carry out of the operation.
ü The
overflow (V) bit is set when an arithmetic operation results in an overflow.
The
basic ARM programming model
Ø ARM data instructions
ARM
comparison instructions
ARM move
instructions
ARM
load-store instructions and pseudo-operations
Ø Flow of
Control
The B (branch) instruction is the basic mechanism in ARM for
changing the flow of control. The address that is the destination of the branch
is often called the branch target. Branches are PC-relative—the
branch specifies the offset from the current PC value to the branch target. The
offset is in words, but because the ARM is byte addressable, the offset is
multiplied by four (shifted left two bits, actually) to form a byte address.
Thus, the instruction B #100 will add 400 to the current PC value.
We often
wish to branch conditionally, based on the result of a given computation. The
if - statement is a common example. The ARM allows any instruction,
including branches, to be executed conditionally. This allows branches to be
conditional, as well as data operations.
Condition
codes in ARM