140 likes | 286 Views
This text explores the ARM programmer’s model, focusing on memory formats such as Big Endian and Little Endian. It explains how the ARM architecture views memory as a linear collection of 32-bit words, detailing the significance of byte ordering. The document also covers critical elements of ARM processor modes, including the Program Status Register (CPSR) and its flags affecting application execution. Furthermore, it outlines various ARM instruction types, such as data processing and data transfer operations, crucial for effective embedded systems programming.
E N D
Embedded Systems Programming ARM programmer’s model and assembler
Memory Formats • The ARM views memory as a linear collection of bytes numbered upwards from zero. Bytes 0 to 3 hold the first stored word, bytes 4 to 7 the second and so on. The ARM can treat words in memory as being stored either in Big Endian or Little Endian format. • A word is 32 bits • Addresses are 32 bits
Little endian addresses of bytes within words • In little endian format, the lowest numbered byte in a word is considered the word’s least significant byte, and the highest numbered byte the most significant. Byte 0 of the memory system is therefore connected to data lines 7 through 0.
Big endian addresses of bytes within words • In big endian format, the most significant byte of a word is stored at the lowest numbered byte and the least significant byte at the highest numbered byte. Byte 0 of the memory system is therefore connected to data lines 31 through 24.
Program Status Register format • In user programs only the top 4 bits of the CPSR are relevant • N - the result was negative • Z - the result was zero • C - the result produced a carry out • V - the result generated an arithmetic overflow • I, F – interrupt enable bits • T – instruction set (Thumb/ARM)
The ARM instruction set • a) Data processing instructions • b) Data transfer instructions • c) Control flow & conditional execution • d) Special instructions
Data processing instructions • ALL operands are 32-bits wide and either: • come from registers, or are literals (´immediate´ values ) specified in the instruction • The result, if any, is 32-bits wide and goes into a register • except long multiplies generate 64-bit results • All operand and result registers are specified independently