0% found this document useful (0 votes)
61 views42 pages

02 - Data Processing Instructions

The document discusses ARM data processing instructions. It describes the format of data processing instructions as having a mnemonic, destination register, source register 1, and source register 2. It notes that most instructions can perform operations on source operands using a barrel shifter. The document provides examples of ADD, SUB, AND, ORR, and other instructions. It summarizes that data processing instructions include register movement, arithmetic, logical, multiplication, and comparison operations.

Uploaded by

River Abod
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
0% found this document useful (0 votes)
61 views42 pages

02 - Data Processing Instructions

The document discusses ARM data processing instructions. It describes the format of data processing instructions as having a mnemonic, destination register, source register 1, and source register 2. It notes that most instructions can perform operations on source operands using a barrel shifter. The document provides examples of ADD, SUB, AND, ORR, and other instructions. It summarizes that data processing instructions include register movement, arithmetic, logical, multiplication, and comparison operations.

Uploaded by

River Abod
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
Download as pdf or txt
Download as pdf or txt
You are on page 1/ 42

ARM Instruction Set:

Data Processing Instructions

CMPE 364
Microprocessor Based Design
SPRING 2021

Slides prepared by Dr. Qutaibah Malluhi


Some slides are adapted from slides by Dr. M. Almeer 1
Modified by Dr. Loay Ismail
Data Processing Instruction Format
 Most Data Processing Instructions follow:
MNEMONIC DST, SRC1, SRC2
 Mnemonic is a short name for the operation
 Like ADD, SUB, UMUL, EOR
 Destination is first register listed (a GP Register = r0 – r15)
 If immediate/constant data is used, it is always the last
operand
 Will represent hexadecimal numbers with the prefix 0x and
binary numbers with the prefix 0b.
Data Processing Instruction Format
 Most data processing instructions can process one of their
operands using the barrel shifter.
 If you use the S suffix on a data processing instruction, then it
updates the flags in the CPSR.
 Transfer, Arithmetic and Logical operations update the carry
flag C, negative flag N, zero flag Z and overflow flag V.
 The C carry flag is set from the result of the barrel shift as the last
bit shifted out.
 The N negative flag is set to bit 31 of the result.
 The Z zero flag is set if the result is zero.
 The V overflow flag is set if the result leads to an overflow.
Examples of ADD Instructions
ADD r0, r2, r5

ADD r3, r1, #0x2b  Hex immediate

ADD r3, r11, #16  Dec. immediate

ADDS r4, r0, r2  sets the flags

4
Data Processing Instructions Summary
 Register movement operations:
 MOV, MVN
 Arithmetic operations Covered in this
 ADD, ADDC, SUB, SUBC, RSB, RSC set of slides
 Bit-wise logical operations
 AND, EOR, ORR, BIC
 Multiplication instructions
 MUL, UMUL, SMUL, MLA, UMLAL, SMLAL
 Comparison operations
 TST, TEQ, CMP, CMN
5
Register Transfer Instructions
MOV and MVN

6
MOV Instruction
 Copies N (the source) into a destination register Rd, where N is a
register or immediate value.
 Useful for setting initial values and transferring data between
registers

MOV DST, SRC


Syntax: <instruction>{<cond>}{S} Rd, N
MOV Move a 32-bit value into a register Rd = N

MVN Move the NOT of the 32-bit value into a register Rd = ∼N


MOV Instruction
This example shows a simple move instruction. The MOV instruction takes
the contents of register r5 and copies them into register r7, in this case,
taking the value 5, and overwriting the value 8 in register r7.

PRE r5=5
r7=8
MOV r7, r5 ; let r7 = r5
POST r5=5
r7=5
MOV Instruction
 Operand N is either a register Rm or a constant preceded by #.
 Example
given the instruction shown below, get r3 and r9 after execution.
Assume r3 = 0xFEEA082C and r9 = 0x8000AC40?

MOV r3, r9

 Solution
r3 = 0x8000AC40 and r9 remains the same.
MOV Instruction
 Example
Determine r1 after execution on next instruction assuming it contains
0x2E059401?

MOV r1, #0x0000009C

 Solution
r1 = 0x0000009C
MOV Instruction
 Example
Determine r10 after execution on next instruction assuming it contains
0x2E059401?

MOV r10, #384

 Solution
Hex of 384 = 256 + 128
r10 = 0x00000180
MVN Instruction
 Move Negative Instruction.
 Has same effect of MOV instruction but copies the one’s
complement of the source to destination.
 Source: general purpose register or immediate

MVN DST, SRC


MVN Instruction
 Example: Determine the content of r2 and r5 after the execution
of the following instruction. Assume r2 = 0xA6E9F004, r5 =
0xCE00A824?
MVN r2, r5

 Solution:
r2 = 0x31FF57DB, r5 = SAME.
MVN Instruction
 Example: Determine the content of r4 after the execution of the
following instruction?
MVN r4, #24
 Solution:
BEFORE: #24 = 0000 0000 0000 0000 0000 0000 0001 10002
#24 = 0x00000018.
AFTER: r4 = 1111 1111 1111 1111 1111 1111 1110 01112
r4 = 0xFFFFFFE7.
Arithmetic Instructions
ADD, ADDC, SUB, SUBC, RSB, RSC

15
Arithmetic Instructions
 The arithmetic instructions implement addition and subtraction
of 32-bit signed and unsigned values.

Syntax: <instruction>{<cond>}{S} Rd, Rn, N


ADC add two 32-bit values and carry Rd = Rn + N + carry
ADD add two 32-bit values Rd = Rn + N
SUB subtract two 32-bit values Rd = Rn − N
RSB reverse subtract of two 32-bit values Rd = N − Rn
SBC subtract with carry of two 32-bit values Rd = Rn − N − !(carry flag)
RSC reverse subtract with carry of two 32-bit values Rd = N − Rn − !(carry flag)

N is the result of the shifter operation. The syntax of shifter operation will be shown later.
ADD Instruction
 ADD instruction adds 2 source operands SRC1 and SRC2, and
stores the result in destination register DST.
 The first source operand must be general purpose register, while
the other can be a register or an immediate operand.

ADD DST, SRC1, SRC2


ADD Examples
 Example:
Get r0, r3, and r9 after the next instruction, if
r0 =0x00014009
r3 =0x00326018
ADD r9, r0, r3

 Answer:
r9 = 0x0033A021
r0 and r3 No Change
ADD Examples
 Example:
Get r1 and r6 after the next instruction, if
r6 = 0xFFFFFFFE (-2?)

ADD r1, r6, #24

 Answer:
r1 = 0x00000016 = 22.
SUB Instruction
 The SUB instruction subtracts the 2nd source (SRC2) from the 1st
source (SRC1) and replaces the result in destination register (DST).
SUB DST, SRC1, SRC2

 EXAMPLE: Get r4 if
r2 = 0x000006A0
r1 = 0x000003C4

SUB r4, r2, r1

 SOLUTION: r4 = 0x000002DC
SUB Instruction

 EXAMPLE: Get r4 if r2 = 0x000008E0?

SUB r4, r2, #0xFFFFFFFE (-2)

 SOLUTION:
r4 = 0x000008E0 – 0xFFFFFFFE = 0x000008E2
RSB Instruction
 RSB is Reverse Subtract Instruction.
 Subtracts SRC1 from SRC2

RSB DST, SRC1, SRC2

 EXAMPLE: Show how the subtracts occur? If


r3 = 0x000006BE,
r9 = 0x000009AC
RSB r8, r3, r9

 SOLUTION: r8 = r9 – r3 = 0x000002EE
RSB Instruction
 EXAMPLE:
 Write Assembly instruction to subtract r7 from 1000 and replace
result in r7?
 SOLUTION:
RSB r7, r7, #1000
 EXAMPLE
 Write a single code to convert the sign of r1 register without
knowing its content?
 SOLUTION:
RSB r1, r1, #0
ADC Instruction: Add with Carry
 Add with Carry bit
ADC DST, SRC1, SRC2

 Adds the SRC1 with SRC2 with Carry bit in CPSR register and
places result in DST.
 SRC1 should be a register, while SRC2 can be a register or a
immediate operand.
ADC Instruction: Add with Carry
 EXAMPLE: Get r6 after the execute of next instruction if
r11 = 0x000E5FA9
r10 = 0x00005204
CF = 1

ADC r6, r11, r10

 SOLUTION:
r11 = r10 + r11 + C = 0x000EB1AE
ADC Instruction: Add with Carry
 EXAMPLE: Get r4 after the execution of next instruction, if
r2 = 0x80040608 and CPSR = 0x50000010?

ADC r4, r2, #134 ; (0x86)

 SOLUTION:
r4 = r2 + 134 + 0 = 0x8004068E
Multiword Arithmetic Example
 Write instructions to add a 64-bit integer contained in r2 and r3
to another 64-bit integer contained in r0 and r1, and place the
result in r4 and r5.
 Solution:
ADDS r4, r0, r2 ; adding the least significant words
ADC r5, r1, r3 ; adding the most significant words
carry

r1 r0
+
r3 r2

r5 r4
27
SBC Instruction
 SBC is subtract with carry.
 Subtracts the SRC2 and complement of carry bit in CPSR
register from SRC1 and places the result in DST
 DST = SRC1 – SRC2 – Not(C)
SBC DST, SRC1, SRC2

 EXAMPLE: Get r4 if r2 = 0x000006A0 and r1 = 0x000003C4, and


CPSR = 0x00000010?
SBC r4, r2, r1
 SOLUTION: 000006A0 – 000003C4 – 1 = 000002DB
Multiword Subtraction Example
 Write instructions to subtracts a 64-bit integer contained in r2
and r3 from another 64-bit integer contained in r0 and r1, and
place the result in r4 and r5.
 Solution:
SUBS r4, r0, r2 ; Subtract the least significant words
SBC r5, r1, r3 ; Subtract the most significant words
Borrow
When two’s complement is used:
r1 r0 Borrow  Carry=0
- No Borrow  Carry=1
r3 r2

r5 r4
29
RSC Instruction
 RSC: Reverse Subtract with Carry
 Subtracts SRC1 And complement of Carry from SRC2
and places the result in DST register.
 DST = SRC2 – SRC1 – Not C
RSC DST, SRC1, SRC2
RSC Example
 EXAMPLE: Get r3, if CPSR = 0x0000010,
r0 = 0x08009420,
r2 = 0x014520C0,

RSC r3, r2, r0

 SOLUTION:
r3 = r0 – r2 – 1 = 08009420 – 014520C0 – 1 = 0x06BB735F

31
Bitwise Logical Instructions
AND, EOR, ORR, BIC

32
Logical Instructions
 Logical instructions perform bitwise logical operations on the
two source registers.
 Allow individual bit manipulation: at bit level

Syntax: <instruction>{<cond>}{S} Rd, Rn, N


AND logical bitwise AND of two 32-bit values Rd = Rn & N

ORR logical bitwise OR of two 32-bit values Rd = Rn | N

EOR logical exclusive OR of two 32-bit values Rd = Rn ⊕ N

BIC logical bit clear (AND NOT) Rd = Rn & ∼N


AND Instruction
 Performs bitwise AND of two source operands, SRC1 and SRC2, and stores
the result in DST.
AND DST, SRC1, SRC2
 SRC1 is a GP register, while SRC2 could be GP register or an immediate
operand. DST must be a GP register.

 EXAMPLE: r1=0x1A89F045, r12=0x96231E8D


AND r4, r1, r12
Get r4 = ?, show bit by bit solution
 SOLUTION: 1A89F045  0001 1010 1000 1001 1111 0000 0100 0101
0x12011005 96231E8D  1001 0110 0010 0011 0001 1110 1000 1101
12011005  0001 0010 0000 0001 0001 0000 0000 0101
AND Instruction
 EXAMPLE: write an AND instruction to clear every bit except bits
16, 17, and 19 of register r4?

 SOLUTION:
mask = 0000 0000 0000 1011 0000 0000 0000 0000
= 0x000B0000

AND r4, r4, 0x000B0000


Show in bit by bit.
ORR Instruction
 Performs bitwise Inclusive OR of SRC1 and SRC2 and places the result in
DST.
 SRC1 is a register while SRC2 could be a register or an immediate operand.
ORR DST, SRC1, SRC2

 EXAMPLE: r6 = 0xEF486EE9, r1=0x80182ACF, what is r1 after the following


instruction?
ORR r1, r1, r6
 SOLUTION: ???
0xEF586EEF EF486EE9  1110 1111 0100 1000 0110 1110 1110 1001
80182ACF  1000 0000 0001 1000 0010 1010 1100 1111
EF586EEF  1110 1111 0101 1000 0110 1110 1110 1111
ORR Instruction
 EXAMPLE
Set bit positions 7 and 9 in register r0 to 1 without touching other 30
bits in the same register?

 SOLUTION:
Will use an ORR instruction, ORing r1 register with a 32-bit Mask.
Mask will be = 0x --------?
ORR r0, r0, #0x00000280
EOR (Exclusive OR) Instruction
 Exclusive OR which performs Exclusive OR of 2 sources, SRC1
And SRC2, and places result in DST.

EOR DST, SRC1, SRC2

 SRC1: GP register, SRC2: GP register or immediate operand,


DST must be GP register.
 Very useful instruction for comparison to see which bit position
they differ.
 Also used in encryption and decryption with keys
EOR Instruction
 EXAMPLE: Get r9? if r5 = 0x7C5D6B21, r8 = 0x9624EC30?
EOR r9, r5, r8
 ANSWER:
r9 = 0xEA798711.

 EXAMPLE: Invert bit 30 of r0 using a single instruction?


 SOLUTION:
MASK = 0100 0000 0000 0000 0000 0000 0000 0000
= 0x40000000
EOR r0, r0, 0x40000000
BIC (Bit Clear ) Instruction
 Bit Clear Instruction clears 1 bit or more in the first source
register SRC1, and stores the result in DST register
 The bit positions needed for clear should be placed in SRC2
register.
 bit=1 means clear and bit=0 means do not change
BIC DST, SRC1, SRC2

DST = SRC1 AND !SRC2


BIC (Bit Clear ) Instruction
 Example: using a single instruction clear bit-5 in register r0?
 Solution:
Mask = 0000 0000 0000 0000 0000 0000 0010 0000 =
= 0x20

BIC r0, r0, #0x20


Summary of Common Utilization of Bitwise Logical Operations
Operator Common Usage
AND Selectively mask (clear) bits
 Use 0 in the position to be masked and 1 elsewhere

OR Selectively set bits


 Use 1 in the position to be set and 0 elsewhere

EOR Selectively complement bits


 Use 1 in the position to be complemented and 0 elsewhere
Identify which bits are different
 1 in the result indicates the corresponding operand bits are different

BIC Selectively clear bits


 Use 1 in the position to be masked and 0 elsewhere

42

You might also like