This preview shows page 1. Sign up to view the full content.
Unformatted text preview: stack pointer has a consistent behaviour. The load and store multiple register instructions are an efficient way to save and restore processor state and to move blocks of data around in memory. They save code space and operate up to four times faster than the equivalent sequence of single 62 ARM Assembly Language Programming Figure 3.2 Multiple register transfer addressing modes. Table 3.1 The mapping between the stack and block copy views of the load and store multiple instructions. Control flow instructions 63 register load or store instructions (a factor of two due to improved sequential behaviour and another factor of nearly two due to the reduced instruction count). This significant advantage suggests that it is worth thinking carefully about how data is organized in memory in order to maximize the potential for using multiple register data transfer instructions to access it. These instructions are, perhaps, not pure 'RISC' since they cannot be executed in a single clock cycle even with separate instruction and data caches, but other RISC architectures are beginning to adopt multiple register transfer instructions in order to increase the data bandwidth between the processor's registers and the memory. On the other side of the equation, load and store multiple instructions are complex to implement, as we shall see later. The ARM multiple register transfer instructions are uniquely flexible in being able to transfer any subset of the 16 currently visible registers, and this feature is powerfully exploited by the ARM procedure call mechanism which is described in Section 6.8 on page 175. 3.3 Control flow instructions
This third category of instructions neither processes data nor moves it around; it simply determines which instructions get executed next. Branch instructions The most common way to switch program execution from one place to another is to use the branch instruction: LABEL The processor normally executes instructions sequentially, but when it reaches the branch instruction it proceeds directly to the instruction at LABEL instead of executing the instruction immediately after the branch. In this example LABEL comes after the branch instruction in the program, so the instructions in between a...
View Full Document
- Spring '09