ARM Processor
History Started in 1983 as a project for Acorn Computers Ltd The original processor was an advanced MOS Technology 6502 (an 8-bit microprocessor designed by MOS Technology in 1975 considered the least expensive at the time
History ARM1 ARM2 ARM3 Completed in 1985 First “real” production systems 32-bit data bus 26-bit address space 16 32-bit registers (one of these served as the program counter Only 30000 transistors Did not have microcode No cache Performed better than the 286 4 million instructions per second ARM3 Consisted of a 4kb cache
History In the late 1980’s Apple Computer started working with Acorn and the company became Advanced RISC Machines ARM6 Apple used the ARM6-based ARM 610 as the basis for the Apple Newton PDA
History ARM6 ARM7TDMI StrongARM 35000 transistors Most successful implementation DEC licensed this design and produced the StrongARM StrongARM 233MHz Drew only 1 watt of power Took over by Intel in a lawsuit and since then Intel developed the XScale (found in products such as the Dell Axim)
History The following companies all licensed the basic ARM design for various uses Motorola IBM Texas Instruments Nintendo Philips VLSI Sharp Samsung
Uses Hard-drives Mobile phones Routers Calculators Toys Accounts for over 75% of embedded CPU’s
Introduction to ARM RISC design Most of the instructions can be executed in one clock cycle Low power consumption (no heat sinks or fans required) Easy to program Allows for pipelining Thumb NEON Jazelle
Registers 16 registers (R0 to R15 R13 – used for stack operations R14 – used for the link register (used for storing return addresses in the construction of sub routines R15 – the program counter
ARM Assembly MODE 28 :REM If you have an A310 etc. try MODE 15 DIM mcode% 1024 :REM This line reserves 1024 bytes of memory REM which start at position mcode% P%=mcode% :REM P% is a reserved variable which acts as a pointer REM while assembling the code REM we wish the code to start at mcode% [ :REM Note this is the square bracket (to the right REM of the P key). REM This tells BASIC to enter the ARM assembler, all REM commands from now are in ARM assembler. ADD R0,R1,R2 :REM Our ARM code instruction MOV PC,R14 :REM This instruction copies the value in R14 (link REM register contains the return address to return to REM BASIC) into the program counter hence REM jumping to the next BASIC line after running REM our ARM code program. ] :REM Leave the ARM code assembler and return to BASIC.
ARM Assembly INPUT"Enter an integer value "B% INPUT"Enter another integer value"C% REM These two lines therefore will give their values to R1 and R2. A%=USR(mcode%) :REM This line runs the ARM code starting REM at mcode% REM (our assembled code) returning the REM value in R0 to BASIC. PRINT"The answer is ";A% :REM Print the answer. END
ARM Assembly MODE28 DIM mcode% 1024 P%=mcode% [ ADD R0,R1,R2 MOV PC,R14 ] INPUT"Enter an integer value "B% INPUT"Enter another integer value"C% A%=USR(mcode%) PRINT"The answer is ";A% END
Listing 00008FD8 00008FD8 E0810002 ADD R0,R1,R2 00008FDC 1A0F00E MOV PC,R14
Another Example Code in C int gcd(int i, int j) { while (i != j) if (i > j) i -= j; else j -= i; return i; }
Another Example Assembly Code b test loop subgt Ri,Ri,Rj suble Rj,Rj,Ri test cmp Ri,Rj bne loop