Vtu 4th Sem Microprocessor and Microcontroller Module - 5
Vtu 4th Sem Microprocessor and Microcontroller Module - 5
MODULE 5
Data Processing Instructions
The data processing instructions manipulate data within registers. They are move
instructions, arithmetic instructions, logical instructions, compare instructions and
multiply instructions.
Most data processing instructions can process one of their operands using the barrel
shifter.
If S is suffixed on a data processing instruction, then it updates the flags in the cpsr.
MOVE INSTRUCTIONS:
It copies N into a destination register Rd, where N is a register or immediate value. This
instruction is useful for setting initial values and transferring data between registers.
In the example shown below, the MOV instruction takes the contents of register r5 and
copies them into register r7.
Page: 1
Microprocessors and Microcontrollers Module 5
Page: 2
Microprocessors and Microcontrollers Module 5
ARITHMETIC INSTRUCTIONS:
The arithmetic instructions implement addition and subtraction of 32-bit signed and
unsigned values.
Syntax: <instruction>{<cond>} {S} Rd, Rn, N
In the following example, subtract instruction subtracts a value stored in register r2 from
a value stored in the register r1. The result is stored in register r0.
In the following example, the reverse subtract instruction (RSB) subtract r1 from the
constant value #0, writing the result in r0.
Page: 3
Microprocessors and Microcontrollers Module 5
LOGICAL INSTRUCTIONS:
Logical instructions perform bitwise operations on the two source registers.
Syntax: <instruction> {<cond>} {S} Rd, Rn, N
In the example shown below, a logical OR operation between registers r1 and r2 and the
result is in r0.
COMPARISON INSTRUCTIONS:
The comparison instructions are used to compare or test a register with a 32-bit value.
They update the cpsr flag bits according to the result, but do not affect other registers.
After the bits have been set, the information can be used to change program flow by
using conditional execution.
Syntax: <instruction> {<cond>} Rn, N
Example shown below for CMP instruction, both r0 and r1 are equal before the execution
of the instruction. The value of the z flag prior to the execution is 0 and after the
execution z flag changes to 1 (upper case of Z).
Page: 4
Microprocessors and Microcontrollers Module 5
In the following example below shows a multiply instruction that multiplies registers r1
and r2 and places the result into the register r0.
Page: 5
Microprocessors and Microcontrollers Module 5
The long multiply instructions (SMLAL, SMULL, UMLAL, and UMULL) produce a 64-
bit result.
BRANCH INSTRUCTIONS
Q2. Explain briefly branch instructions of ARM processor.
Answer:
A branch instruction changes the flow of execution or is used to call a routine.
This type of instruction allows programs to have subroutines, if-then-else structures, and
loops.
The change of execution flow forces the program counter (pc) to point to a new address.
Page: 6
Microprocessors and Microcontrollers Module 5
The branch with link (BL) instruction changes the execution flow in addition
overwrites the link register lr with a return address. The example shows below a
fragment of code that branches to a subroutine using the BL instruction.
The branch exchange (BX) instruction uses an absolute address stored in register Rm.
It is primarily used to branch to and from Thumb code. The T bit in the cpsr is updated
by the least significant bit of the branch register.
Similarly, branch exchange with link (BLX) instruction updates the T bit of the cpsr
with the least significant bit and additionally sets the link register with the return
address.
LOAD-STORE INSTRUCTIONS
Load-store instructions transfer data between memory and processor registers. There are
three types of load-store instructions: single-register transfer, multiple-register transfer,
and swap.
a) Single-Register Transfer
These instructions are used for moving a single data item in and out of a register.
Here are the various load-store single-register transfer instructions.
Syntax: <LDR|STR>{<cond>}{B} Rd, addressing1
LDR{<cond>}SB|H|SH Rd, addressing2
STR{<cond>}H Rd, addressing2
Page: 7
Microprocessors and Microcontrollers Module 5
Example:
1. LDR r0, [r1]
o This instruction loads a word from the address stored in register r1 and places it
into register r0.
b) Multiple-Register Transfer
Load-store multiple instructions can transfer multiple registers between memory and the
processor in a single instruction. The transfer occurs from a base address register Rn
pointing into memory.
Multiple-register transfer instructions are more efficient from single-register transfers for
moving blocks of data around memory and saving and restoring context and stacks.
Page: 8
Microprocessors and Microcontrollers Module 5
Addressing modes:
Single-Register Load-Store Addressing Modes
The ARM instruction set provides different modes for addressing memory.
These modes incorporate one of the indexing methods: preindex with writeback,
preindex, and postindex
Example:
Page: 9
Microprocessors and Microcontrollers Module 5
Example:
mem32[0x8001c] =0x04
If LDMIA is replaced with LDMIB post execution the content of registers is shown
below
STACK OPERATIONS
The ARM architecture uses the load-store multiple instructions to carry out stack
operations.
The pop operation (removing data from a stack) uses a load multiple instruction;
similarly, the push operation (placing data onto the stack) uses a store multiple
instruction.
Page: 10
Microprocessors and Microcontrollers Module 5
When you use a full stack (F), the stack pointer sp points to an address that is the last
used or full location.
In contrast, if you use an empty stack (E) the sp points to an address that is the first
unused or empty location.
A stack is either ascending (A) or descending (D). Ascending stacks grow towards
higher memory addresses; in contrast, descending stacks grow towards lower memory
addresses.
Addressing modes for stack operation
The LDMFD and STMFD instructions provide the pop and push functions, respectively.
Example1: With full descending
Page: 11
Microprocessors and Microcontrollers Module 5
When the processor executes an SWI instruction, it sets the program counter pc to the
offset 0xB in the vector table.
The instruction also forces the processor mode to SVC, which allows an operating system
routine to be called in a privileged mode.
Each SWI instruction has an associated SWI number, which is used to represent a
particular function call or feature.
The example below shows an SWI call with SWI number 0x123456, used by ARM
toolkits as a debugging SWI.
Since SWI instructions are used to call operating system routines, it is required some
form of parameter passing.
This achieved by using registers. In the above example, register r0 is used to pass
parameter 0x12. The return values are also passed back via register.
Page: 12
Microprocessors and Microcontrollers Module 5
Coprocessor Instructions
Q5. Explain briefly coprocessor instructions.
Answer:
Coprocessor instructions are used to extend the instruction set.
A coprocessor can either provide additional computation capability or be used to control
the memory subsystem including caches and memory management.
These instructions are used only by core with a coprocessor.
Syntax: CDP {<cond>} cp,opcode1, Cd, Cn {,opcode2}
<MRC|MCR>{<cond>}cp,opcode1,Rd,Cn,Cm{,opcode2}
<LDC|STC>{<cond>}cp,Cd,addressing
In the syntax of the coprocessor instructions, the cp field represents the number between
p0 and p15. The opcode fields describe the operation to take place on the coprocessor.
The Cn, Cm and Cd fields describe registers within the coprocessor.
For example: The instruction below copies coprocessor CP15 register c0 into a general
purpose register r10.
Page: 13
Microprocessors and Microcontrollers Module 5
MRC p15, 0, r10, c0, c0, 0 ; CP15 register-0 is copied into general purpose
register r10.
For example: The instruction below moves the contents of CP15 control register c1 into
register r1 of the processor core.
MRC p15, 0, r1, c1, c0, 0
Loading Constants
Q6. Explain briefly the loading constants.
Answer:
There are two pseudo instructions to move a 32-bit constant value to a register.
Syntax: LDR Rd, =constant
ADR Rd, label
The example below shows an LDR instruction loading a 32-bit constant 0xff00ffff into
register r0.
LDR r0, =0xff00ffff
Programs:
1. Write ALP program for ARM7 demonstrating the data transfer.
Answer:
AREA DATATRANSFER, CODE, READONLY
ENTRY
LDR R0, =SRC
LDR R1, =DST
LDR R2, = 20
WORDCOPY LDR R3, [R0], #4
STR R3, [R1], #4
SUBS R2, R2, #1
BNE WORDCOPY
SRC DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
AREA BLOCKDATA, DATA, READWRITE
DST DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
END
Page: 14
Microprocessors and Microcontrollers Module 5
Page: 15
Microprocessors and Microcontrollers Module 5
END1
LDR R5, =0X01
END2
MOV PC, R6
END
5. Write ALP program to add array of 16 bit numbers and store the result in memory.
Answer:
AREA AryAdd, CODE, READONLY
ENTRY
LDR R0, =SCR ; pointer to source array
LDR R1, = DST ; pointer to destination
LDR R2, =5 ; count of numbers
LDR R5, =0 ; initial sum
UP LDRH R3, [R0] ; 1st number in R2
ADD R5, R5, R3 ; add numbers
ADD R0, R0, #2 ; increment pointer to next number
SUBS R2, R2, #1 ; decrement count by 1
CMP R2, #0
BNE UP
STRH R5, [R1]
SRC DCW 10, 20, 30, 40, 50
AREA BLOCKDATA, DATA, READWRITE
DST DCW 0
END
Page: 16
Microprocessors and Microcontrollers Module 5
Page: 17