COPE-02 Hardware-Software Interface.indd
2
Hardware/Software Interface
Uwe R. Zimmer – The Australian National University
Computer Organisation & Program Execution 2021
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 98 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
References for this chapter
[Patterson17]
David A. Patterson & John L. Hennessy
Computer Organization and Design – The Hardware/Software Interface
Chapter 2 “Instructions: Language of the Computer” & Chapter 3 “Arithmetic for Computers”
ARM edition, Morgan Kaufmann 2017
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 99 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Adding the value of two registers
Ai
XOR
AND
Bi
XOR
AND
OR
Si
C0
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
r0
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
C
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
r11
r12
SP
LR
PC
ALU
Register bank
Status flags
NZCVQ
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
The CPU will fetch the content of the memory cell which PC is pointing to.
We want the CPU to execute:
r4 := r2 + r3
What to store in this memory cell?
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 100 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Adding the value of two registers
Ai
XOR
AND
Bi
XOR
AND
OR
Si
C0
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
r0
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
C
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
r11
r12
SP
LR
PC
ALU
Register bank
Status flags
NZCVQ
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 0 0 Rm Rn Rd
ADDS
Op Code Arguments
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 101 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Adding the value of two registers
Ai
XOR
AND
Bi
XOR
AND
OR
Si
C0
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
r0
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
OR
OP1-4
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
r11
r12
SP
LR
PC
ALU
Register bank
Status flags
NZCVQ
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D
16#D4#
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 0 0
ADDS r4, r2, r3
1 0 00 1 00 1 1
16#18#
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 0 0
ADDS r4, r2, r3
0 1 1 1 0 00 1 0
16#18# 16#D4#
Assembler Disassembler
r4 := r2 + r3
Status fl ags set:
• N Negative (MSB = 1)
• Z Zero (all bits zero)
• C Carry (carry out)
• V Overfl ow (sign wrong)
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 102 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Adding the value of two registers
Ai
XOR
AND
Bi
XOR
AND
OR
Si
C0
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
r0
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
C
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
r11
r12
SP
LR
PC
ALU
Register bank
Status flags
NZCVQ
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 0 0 Rm Rdn
ANDS
Op Code Arguments
0 0 0
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 103 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Adding the value of two registers
Ai
XOR
AND
Bi
XOR
AND
OR
Si
C0
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
r0
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
C
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
r11
r12
SP
LR
PC
ALU
Register bank
Status flags
NZCVQ
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 0 0
ANDS r5, r6
0 0 0 1 0 11 1 0
16#35#16#40#
Assembler Disassembler
r5 := r5 & r6
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 104 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Adding the value of two registers
Ai
XOR
AND
Bi
XOR
AND
OR
Si
C0
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
r0
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
XOR
AND
OR
Si
AND
AND
AND
AND
OR
OR
OP1-4 Resulti
Ai
XOR
AND
Bi
OR
OP1-4
r1
r2
r3
r4
r5
r6
r7
r8
r9
r10
r11
r12
SP
LR
PC
ALU
Register bank
Status flags
NZCVQ
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D D D D D D D D D D D
D
C
D D D D D D
16#D4#
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 0 0
ADDS r4, r2, r3
1 0 00 1 00 1 1
16#18#
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 1 1 0 0
ADDS r4, r2, r3
0 1 1 1 0 00 1 0
16#18# 16#D4#
Assembler Disassembler
r4 := r2 + r3
Status fl ags set:
• N Negative (MSB = 1)
• Z Zero (all bits zero)
• C Carry (carry out)
• V Overfl ow (sign wrong)
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 105 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M 32 bit add instructions
add{s} {
adc{s} {
add{s} {
adc{s} {
qadd {
s: sets the fl ags based on the result
c: makes the command conditional.
set), CC (carry clear), MI (minus), PL (plus), VS (overfl ow set), VC (overfl ow clear),
HI (unsigned higher), LS (unsigned lower or same), GE (signed greater or equal),
LT (signed less), GT (signed greater), LE (signed less or equal), AL (always)
q: instruction width. Can be .N for narrow (16 bit) or .W for wide (32 bit)
Rd, Rn, Rm: any register, incl. SP, LR and PC (with some restrictions). Result goes to Rn (if no Rd).
shift: value of Rm is preprocessed with LSL (logical shift left – fi lls zeros), LSR (logical shift
right – fi lls zeros), ASR (arithmetic shift right – keeps sign) or ROR (rotate right) followed by
the #number of bits to shift/rotate by. There is also a RRX (rotate right by one incl. carry fl ag)
const: an immediate value in the range 0 .. 4095 directly or in the range 0 .. 255 with rotation.
adds r1, r4, r5
adcs r1, r4
qadd r1, r4, r5
add r1, #1
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 106 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M 32 bit add instructions
add{s} {
adc{s} {
add{s} {
adc{s} {
qadd {
s: sets the fl ags based on the result
c: makes the command conditional.
set), CC (carry clear), MI (minus), PL (plus), VS (overfl ow set), VC (overfl ow clear),
HI (unsigned higher), LS (unsigned lower or same), GE (signed greater or equal),
LT (signed less), GT (signed greater), LE (signed less or equal), AL (always)
q: instruction width. Can be .N for narrow (16 bit) or .W for wide (32 bit)
Rd, Rn, Rm: any register, incl. SP, LR and PC (with some restrictions). Result goes to Rn (if no Rd).
shift: value of Rm is preprocessed with LSL (logical shift left – fi lls zeros), LSR (logical shift
right – fi lls zeros), ASR (arithmetic shift right – keeps sign) or ROR (rotate right) followed by
the #number of bits to shift/rotate by. There is also a RRX (rotate right by one incl. carry fl ag)
const: an immediate value in the range 0 .. 4095 directly or in the range 0 .. 255 with rotation.
Any of those instructions
requires exactly one CPU cycle
(in terms of throughput).
“Reduced Instruction
Set Computing (RISC)”
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 107 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Numeric CPU status fl ags
0
Natural binary numbers
2n-1a ba+b
Carry
Wrap-around or modulo 2n
2’s complement binary numbers
0 2n-1-1a ba+b
Overflow
Wrap-around
-2n-1 c 2c
Overflow
0 a b a+b
Saturate
c
Saturate
2c
d2d
Which of those
operations will
set which fl ag?
adds
adcs
qadd
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 108 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M 32 bit Addition, Subtraction instructions
add{s} {
adc{s} {
add{s} {
adc{s} {
qadd {
sub{s} {
sbc{s} {
rsb{s} {
sub{s} {
sbc{s} {
rsb{s} {
qsub {
All instructions operate on 32 bit wide numbers.
… versions for narrower numbers, as well as versions which operate
on multiple narrower numbers in parallel exist as well.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 109 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
64 bit Addition, Subtraction
As your registers are 32 bit wide, you need two steps to add two 64 bit numbers in
r3:r2, r5:r4 (with r2 and r4 being the lower 32 bits) to one 64 bit number in r1:r0:
adds r0, r2, r4 ; r0 := r2 + r4 add least significant words, set flags
adcs r1, r3, r5 ; r1 := r3 + r5 + C add most significant words and carry bit
… and symmetrically if you need a 64 bit subtraction:
subs r0, r2, r4 ; r0 := r2 – r4 least significant words, set flags
sbcs r1, r3, r5 ; r1 := r3 – r5 – NOT (C) most significant words and carry bit
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 110 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M 32 bit Boolean (bit-wise) instructions
and{s} {
bic{s} {
orr{s} {
orn{s} {
eor{s} {
and{s} {
bic{s} {
orr{s} {
orn{s} {
eor{s} {
cmp
cmn
tst
teq
cmp
cmn
tst
teq
This exhausts
the simple
ALU from
chapter 1 …
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 111 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data inside the CPU
mov{s}
mov{s}
; Rd := Rm
; Rd := const
lsr{s}
lsr{s}
; 0 0 0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
x x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x . .
x x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
.
c
n
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx ccc
cccc
asr{s}
asr{s}
; s s s
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
s x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x c . .
s x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
.
c
n
sss xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
sss xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx ccc
ccc
lsl{s}
lsl{s}
; 0 0 0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
x x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x. .
x x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
.
n
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxcccc
cccc
ror{s}
ror{s}
; c b a
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
x x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x c b a
x x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
.ccccc bbbbbb aaaaa
n
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx cccccccc bbbbb aaaa
rrx{s}
; x x
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
x x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x x x y
x x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
y
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
yyyyyy
yyyyyyycccc
cccc
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 112 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data inside the CPU
mov{s}
mov{s}
; Rd := Rm
; Rd := const
lsr{s}
lsr{s}
; 0 0 0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
x x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x . .
x x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
.
c
n
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx x x x x x x x x x x xx x x x x x x xxx xxx xxx xxx ccc
cccc
asr{s}
asr{s}
; s s s
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
s x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x c . .
s x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
.
c
n
sss xxx xxx xxx xxx x x x x x x x xx x x x x x x x x x x x x x x xxx
sss xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx ccc
ccc
lsl{s}
lsl{s}
; 0 0 0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
x x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x. .
x x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
.
n
xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxcccc
cccc
ror{s}
ror{s}
; c b a
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
x x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x c b a
x x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
.ccccc bbbbbb aaaaa
n
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx cccccccc bbbbb aaaa
rrx{s}
; x x
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
x x x x x x x x x x x x xx x x
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
x x x x x x x x x x x x x x x y
x x x x x x x x x x x x xx x x x x x x x x x x x x x x x
C
y
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
yyyyyy
yyyyyyycccc
cccc
If this is numbers then …
xxxxxxx xxx
22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3
xxxx xx xx xxx xxx xxx xxx xxxxxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx xxx
xxx xxx xxx xx xx xx xx x x x xx x x xx x x x x x x x x x xx x x x x x x x x x x x
26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4
/Rm 2n rounded towards 3-
xxxxxxx
xxxxxxxx
x x x x x x x
x x x x x x x
Rm 2n$
xxxxxxxx
24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8
x x x x x x x x x xx x x x x x xx
for 2’s complements
28 27 26 25 2
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 113 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic inside the CPU
Calculate:
e := a + b – 2*c
assuming all types are 32 bit 2’s complement numbers (Integer),
r1 holds a, r2 holds b, r3 holds c, and the results should be in r4.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 114 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic inside the CPU
Calculate:
e := a + b – 2*c
assuming all types are 32 bit 2’s complement numbers (Integer),
r1 holds a, r2 holds b, r3 holds c, and the results should be in r4.
add r5, r1, r2
lsl r6, r3, #1 ; you could also write: mov r6, r3, lsl #1
sub r4, r5, r6
We need temporary storage (r5, r6) in the process as we didn’t want to over-
write the original values. Yet the total number of registers is always limited.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 115 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic inside the CPU
Calculate:
e := a + b – 2*c
assuming all types are 32 bit 2’s complement numbers (Integer),
r1 holds a, r2 holds b, r3 holds c, and the results should be in r4.
add r5, r1, r2
lsl r6, r3, #1 ; you could also write: mov r6, r3, lsl #1
sub r4, r5, r6
We need temporary storage (r5, r6) in the process as we didn’t want to over-
write the original values. Yet the total number of registers is always limited.
How about we assume that values are no longer needed after this expression:
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 116 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic inside the CPU
Calculate:
e := a + b – 2*c
assuming all types are 32 bit 2’s complement numbers (Integer),
r1 holds a, r2 holds b, r3 holds c, and the results should be in r4.
add r5, r1, r2
lsl r6, r3, #1 ; you could also write: mov r6, r3, lsl #1
sub r4, r5, r6
We need temporary storage (r5, r6) in the process as we didn’t want to over-
write the original values. Yet the total number of registers is always limited.
How about we assume that values are no longer needed after this expression:
add r1, r1, r2
lsl r3, r3, #1
sub r4, r1, r3
… your compiler will know when such side-effects are ok and when not.
Any overfl ows?
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 117 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic inside the CPU
Calculate:
e := a + b – 2*c
We need to check results after each step:
adds r1, r1, r2 ; need to check overflow flag
lsl r3, r3, #1 ; need to check that the sign did not change
subs r4, r1, r3 ; need to check overflow flag again
We don’t have the means yet to branch off into different
actions in case things go bad … to come soon.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 118 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic inside the CPU
Calculate:
e := a + b – 2*c
We need to check results after each step:
adds r1, r1, r2 ; need to check overflow flag
lsl r3, r3, #1 ; need to check that the sign did not change
subs r4, r1, r3 ; need to check overflow flag again
We don’t have the means yet to branch off into different
actions in case things go bad … to come soon.
Or we use saturation arithmetic and live with the error:
qadd r1, r1, r2
qadd r3, r3, r3
qsub r4, r1, r3
If we know we need to carry on either way, this
at least minimizes the local errors.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 119 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Cortex-M4 Address Space
Your CPU has 32 bit of address space
4 GB
… address space does not equate to physical memory!
Not all memory is equal: Some memory …
… can be executed
… can be written to or read from or both
… has side-effects (coffee cups fall over)
… has strictly-ordered access
… does not physically exist
16#00000000#
16#1FFFFFFF#
16#3FFFFFFF#
16#20000000#
16#5FFFFFFF#
16#40000000#
16#9FFFFFFF#
16#60000000#
16#DFFFFFFF#
16#A0000000#
16#E00FFFFF#
16#E0000000#
16#FFFFFFF#
16#E0100000#
Code
SRAM
Peripheral
External RAM
External device
Private peripheral bus
Vendor-specific memory
0.5 GB
0.5 GB
0.5 GB
1 GB
1 GB
1 MB
511 MB
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 120 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Copy data in and out of the CPU
Rb – Address Memory cell Rd – Destination
In its most basic form the value of a register is interpreted as an
address and the memory content there is loaded into another register.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 121 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Copy data in and out of the CPU
Rb – Address Memory cell Rd – Destination
In its most basic form the value of a register is interpreted as an
address and the memory content there is loaded into another register.
Yet: most data is structured.
… like a group of local variables, a record, an
array and any combination of the above …
How to read an entry in an array/record?
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 122 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Copy data in and out of the CPU
Rb – Base address Base memory cell
Ri or const – Index
Indexed memory cell Rd – DestinationWrite-back
+
Most copy operations between CPU and
memory follow this basic scheme.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 123 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rb – Base address Base memory cell
offset
Offset memory cell Rd – Destination
+
ldr
str
Reads from a potentially offset memory cell with a base register address.
Immediate addressing
ldr r1, [r4]
ldr r1, [r4, #8]
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 124 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rb – Base address Base memory cell
offset
Offset memory cell Rs – Source
+
ldr
str
Writes to a potentially offset memory cell with a base register address.
Immediate addressing
str r1, [r4, #-12]
str r1, [r4]
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 125 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rb – Base address Base memory cell
offset
Offset memory cell Rd – Destination
+
Write-back
ldr
str
Reads from an offset memory cell with a base register address
and writes the offset address back into the original base register.
Immediate addressing
(“Pre-indexed”)
ldr r1, [r4, #8]!
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 126 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rb – Base address Base memory cell
offset
Offset memory cell Rs – Source
+
Write-back
ldr
str
Writes to an offset memory cell with a base register address
and writes the offset address back into the original base register.
Immediate addressing
(“Pre-indexed”)
str r1, [r4, #-12]!
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 127 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rb – Base address Base memory cell
offset
Offset memory cell
Rd – Destination
+
Write-back
ldr
str
Reads from a memory cell with a base register address
and writes the offset address back into the original base register.
Immediate addressing
(“Post-indexed”)
ldr r1, [r4], #8
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 128 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rb – Base address Base memory cell
offset
Offset memory cell
Rs – Source
+
Write-back
ldr
str
Writes to a memory cell with a base register address
and writes the offset address back into the original base register.
Immediate addressing
(“Post-indexed”)
str r1, [r4], #8
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 129 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rb – Base address Base memory cell
Ri – Index {shifted}
Offset memory cell Rd – Destination
+
ldr
str
Reads from a memory cell with a base register address plus a potentially shifted index register.
Index register addressing
ldr r1, [r4, r3]
i ll hif d i d i
ldr r1, [r4, r3, LSL #2]
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 130 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rb – Base address Base memory cell
Ri – Index {shifted}
Offset memory cell Rs – Source
+
ldr
str
Writes to a memory cell with a base register address plus a potentially shifted index register.
Index register addressing
str r1, [r4, r3]
i ll hif d i d i
str r1, [r4, r3, LSL #2]
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 131 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
PC Current instruction
offset
Data in code Rd – Destination
+
ldr
Reads from a data area embedded into the code section.
Literal addressing
Note there is no
store version.
ldr r1, data
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 132 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rs – Stack address
Relative cell n Rz – Source
Relative cell 1 Rx – Source
Write-back
… … …
stmia
ldmdb
Stores multiple registers into sequential memory addresses.
Stores “increment after” and loads “decrement before”.
Multiple registers
(positive growing stack)
stmia r9!, {r1, r3, r4, fp}
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 133 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rs – Stack address
Relative cell n Rz – Destination
Relative cell 1 Rx – DestinationWrite-back
… … …
stmia
ldmdb
Reads multiple registers from sequential memory addresses.
Stores “increment after” and loads “decrement before”.
Multiple registers
(positive growing stack)
Note that any
register can be
use as stack base,
i.e. you can have
multiple stacks
simultaneously.
ldmdb r9!, {r1, r3, r4, fp}
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 134 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rs – Stack address
Relative cell n Rz – Source
Relative cell 1 Rx – SourceWrite-back
… … …
stmdb
ldmia
Stores multiple registers to sequential memory addresses.
Stores “decrement before” and loads “increment after”.
Multiple registers
(negative growing stack) Ne
gative growing
stacks are the de-facto
standard in industry.
stmdb SP!, {r1, r3, r4, fp}
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 135 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Move data in and out of the CPU
Rs – Stack address
Relative cell n Rz – Destination
Relative cell 1 Rx – Destination
Write-back
… … …
stmdb
ldmia
Reads multiple registers from sequential memory addresses.
Stores “decrement before” and loads “increment after”.
Multiple registers
(negative growing stack)
ldmia SP!, {r1, r3, r4, fp}
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 136 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic in memory
Calculate again:
e := a + b – 2*c
but now a, b, c and e are stored in memory, relative to an address stored in FP (“Frame Pointer”):
a is held at [fp – 12], b at [fp – 16], c at [fp – 20] and e at [fp – 24]
In order to do arithmetic we need to load those values into the CPU
fi rst and afterwards we need to store the result in memory:
ldr r1, [fp, #-12]
ldr r2, [fp, #-16]
add r1, r1, r2
ldr r2, [fp, #-20]
lsl r2, r2, #1
sub r1, r1, r2
str r1, [fp, #-24]
Notice that this time we only used two registers.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 137 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic in memory
Calculate again:
e := a + b – 2*c
Or in saturation arithmetic:
ldr r1, [fp, #-12]
ldr r2, [fp, #-16]
qadd r1, r1, r2
ldr r2, [fp, #-20]
qadd r2, r2, r2
qsub r1, r1, r2
str r1, [fp, #-24]
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 138 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic in memory
Calculate again:
e := a + b – 2*c
Or with overfl ow checks:
ldr r1, [fp, #-12]
ldr r2, [fp, #-16]
adds r1, r1, r2 ; need to check overflow flag
ldr r2, [fp, #-20]
lsl r2, r2, #1 ; need to check that the sign did not change
subs r1, r1, r2 ; need to check overflow flag
str r1, [fp, #-24]
It’s time we learn about branching off into
alternative execution paths.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 139 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Branch instructions
b
eq Equal Z = 1
ne Not equal Z = 0
cs, hs Carry set, Unsigned higher or same C = 1
cc, lo Carry clear, Unsigned lower C = 0
mi Minus, Negative N = 1
pl Plus, Positive or zero N = 0
vs Overfl ow V = 1
vc No overfl ow V = 0
hi Unsigned higher C = 1 / Z = 0
ls Unsigned lower or same C = 0 0 Z = 1
ge Signed greater or equal N = Z
lt Signed less N ! Z
gt Signed greater Z = 0 / N = V
le Signed less or equal Z = 1 0 N ! V
al,
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 140 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic in memory
Calculate again:
e := a + b – 2*c
Or with overfl ow checks:
ldr r1, [fp, #-12]
ldr r2, [fp, #-16]
adds r1, r1, r2
bvs Overflow ; branch if overflow is set
ldr r2, [fp, #-20]
adds r2, r2, r2
bvs Overflow ; branch if overflow is set
subs r1, r1, r2
bvs Overflow ; branch if overflow is set
str r1, [fp, #-24]
…
Overflow:
svc #5 ; call the operating system or runtime environment with #5
; (assuming that #5 indicates an overflow situation)
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 141 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic in memory
Calculate again:
e := a + b – 2*c
Or with overfl ow checks:
ldr r1, [fp, #-12]
ldr r2, [fp, #-16]
adds r1, r1, r2
bvs Overflow ; branch if overflow is set
ldr r2, [fp, #-20]
adds r2, r2, r2
bvs Overflow ; branch if overflow is set
subs r1, r1, r2
bvs Overflow ; branch if overflow is set
str r1, [fp, #-24]
…
Overflow:
svc #5 ; call the operating system or runtime environment with #5
; (assuming that #5 indicates an overflow situation)
… but how do we know
where this happened or how
to continue operations?
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 142 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Simple arithmetic in memory
Calculate again:
e := a + b – 2*c
Or with overfl ow checks:
ldr r1, [fp, #-12]
ldr r2, [fp, #-16]
adds r1, r1, r2
blvs Overflow ; branch if overflow is set; keep next location in LR
ldr r2, [fp, #-20]
adds r2, r2, r2
blvs Overflow ; branch if overflow is set; keep next location in LR
subs r1, r1, r2
blvs Overflow ; branch if overflow is set; keep next location in LR
str r1, [fp, #-24]
…
Overflow:
… ; … for example writing a log entry with location
bx lr ; resume operations – assuming the above did not change LR
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 143 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
ARM v7-M Essential multiplications and divisions
32 bit to 32 bit
mul{s} {
mla
mls
udiv
sdiv
32 bit to 64 bit
umull
umlal
smull
smlal
… versions for narrower numbers, as well as versions which operate
on multiple narrower numbers in parallel exist as well.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 144 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Straight power
Calculate:
c := a ^ b
mov r1, #7 ; a
mov r2, #11 ; b ; has to be non-negative
mov r3, #1 ; c
power:
cbz r2, end_power ; exponent zero?
mul r3, r1
sub r2, #1
b power
end_power:
nop ; c = a ^ b
How many iterations?
How many cycles?
7 7 7 7 7 7 7 7 7 7 7711 $ $ $ $ $ $ $ $ $$=
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 145 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
More power
Calculate:
c := a ^ b
mov r1, #7 ; a
mov r2, #11 ; b ; has to be non-negative
mov r3, #1 ; c
mov r4, r1 ; base a to the powers of two, starting with a ^ 1
power:
cbz r2, end_power ; exponent zero?
tst r2, #0b1 ; right-most bit of exponent set?
beq skip ; skip this power if not
mul r3, r4 ; multiply the current power into result
skip:
mul r4, r4 ; calculate next power
lsr r2, #1 ; divide exponent by 2
b power
end_power:
nop ; c = a ^ b
How many iterations?
How many cycles?
7 7 7 711 8 2
1
$$=
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 146 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Table based branching
tbb [
tbh [
Common usage for byte (8 bit) tables
tbb [PC, Ri] ; PC is base of branch table, Ri is index
Branch_Table:
.byte (Case_A – Branch_Table)/2 ; Case_A 8 bit offset
.byte (Case_B – Branch_Table)/2 ; Case_B 8 bit offset
.byte (Case_C – Branch_Table)/2 ; Case_C 8 bit offset
.byte 0x00 ; Padding to re-align with halfword boundaries
Case_A:
… ; any instruction sequence
b End_Case ; “break out”
Case_B:
… ; any instruction sequence
b End_Case ; “break out”
Case_C:
… ; any instruction sequence
End_Case:
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 147 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Table based branching
tbb [
tbh [
Common usage for halfword (16 bit) tables
tbh [PC, Ri, lsl #1] ; PC used as base of branch table, Ri is index
Branch_Table:
.hword (Case_A – Branch_Table)/2 ; Case_A 16 bit offset
.hword (Case_B – Branch_Table)/2 ; Case_B 16 bit offset
.hword (Case_C – Branch_Table)/2 ; Case_C 16 bit offset
Case_A:
… ; any instruction sequence
b End_Case ; “break out”
Case_B:
… ; any instruction sequence
b End_Case ; “break out”
Case_C:
… ; any instruction sequence
End_Case:
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 148 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Basic instruction sets
Category Side effects ARM v7-M
Arithmetic, Logic
Sets and uses
CPU fl ags
add, adc, qadd, sub, sbc, qsub, rsb,
mul, mla, mls, udiv, sdiv,
umull, umlal, smull, smlal,
and, bic, orr, orn, eor, cmp, cmn, tst, teq
Move and shift
registers
mov, lsr, asr, lsl, ror, rrx
Branching Uses CPU fl ags b, bl, bx, blx, tbb, tbh
Load & Store Effects memory ldr, str, ldmdb, ldmia, stmia, stmdb
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 149 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Basic instruction sets
Category Side effects ARM v7-M
Arithmetic, Logic
Sets and uses
CPU fl ags
add, adc, qadd, sub, sbc, qsub, rsb,
mul, mla, mls, udiv, sdiv,
umull, umlal, smull, smlal,
and, bic, orr, orn, eor, cmp, cmn, tst, teq
Move and shift
registers
mov, lsr, asr, lsl, ror, rrx
Branching Uses CPU fl ags b, bl, bx, blx, tbb, tbh
Load & Store Effects memory ldr, str, ldmdb, ldmia, stmia, stmdb
Instruction sets in the fi eld:
RISC: Power, ARM, MIPS, Alpha, SPARK, AVR, PIC, …
CISC: x86, Z80, 6502, 68000, …
Over 50 billion CPUs on
this planet are running
ARM instruction sets
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 150 of 481 (chapter 2: “Hardware/Software Interface” up to page 150)
Basic instruction sets
Category Side effects ARM v7-M
Arithmetic, Logic
Sets and uses
CPU fl ags
add, adc, qadd, sub, sbc, qsub, rsb,
mul, mla, mls, udiv, sdiv,
umull, umlal, smull, smlal,
and, bic, orr, orn, eor, cmp, cmn, tst, teq
Move and shift
registers
mov, lsr, asr, lsl, ror, rrx
Branching Uses CPU fl ags b, bl, bx, blx, tbb, tbh
Load & Store Effects memory ldr, str, ldmdb, ldmia, stmia, stmdb
What’s missing?
Changing CPU privileges and handling interrupts.
Synchronizing instructions
Coming in later chapters
about concurrency and
operating systems.
Hardware/Software Interface
© 2021 Uwe R. Zimmer, The Australian National University page 151 of 481 (chapter 2: “Hardware/Software Interface” up to page 151)
Hardware/Software Interface
• Instruction formats
• Register sets
• Instruction encoding
• Arithmetic / Logic instructions inside the CPU
• Summation, Subtraction, Multiplication, Division
• Logic and shift operations
• Load / Store and addressing modes
• Direct, relative, indexed, and auto-index-increment addressing forms
• Branching
• Conditional branching and unconditional jumps.
Summary