CS计算机代考程序代写 scheme mips compiler concurrency AI arm assembler COPE-02 Hardware-Software Interface.indd

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. can be EQ (equal), NE (not equal), CS (carry
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. can be EQ (equal), NE (not equal), CS (carry
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} {,} , {,} ; Rd := Rn + Rm(shifted)
adc{s} {,} , {,} ; Rd := Rn + Rm(shifted) + C

add{s} {,} , # ; Rd := Rn + #
adc{s} {,} , # ; Rd := Rn + # + C

qadd {,} , ; Rd := Rn + Rm ; saturated

sub{s} {,} , {,} ; Rd := Rn – Rm(shifted)
sbc{s} {,} , {,} ; Rd := Rn – Rm(shifted) – NOT (C)
rsb{s} {,} , {,} ; Rd := Rm(shifted) – Rn

sub{s} {,} , # ; Rd := Rn – #
sbc{s} {,} , # ; Rd := Rn – # – NOT (C)
rsb{s} {,} , # ; Rd := # – Rn

qsub {,} Rn, Rm ; Rd := Rn – Rm ; saturated

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} {,} , {,} ; :Rd Rn Rmshifted/=
bic{s} {,} , {,} ; :Rd Rn Rmshifted/=
orr{s} {,} , {,} ; :Rd Rn Rmshifted0=
orn{s} {,} , {,} ; :Rd Rn Rmshifted0=
eor{s} {,} , {,} ; :Rd Rn Rmshifted5=
and{s} {,} , # ; :Rd Rn const/=
bic{s} {,} , # ; :Rd Rn const/=
orr{s} {,} , # ; :Rd Rn const0=
orn{s} {,} , # ; :Rd Rn const0=
eor{s} {,} , # ; :Rd Rn const5=
cmp , {,} ; R R Flagsn mshifted “-^ h
cmn , {,} ; R R Flagsn mshifted “+^ h
tst , {,} ; R R Flagsn mshifted “/^ h
teq , {,} ; R R Flagsn mshifted “5^ h
cmp , # ; R const Flagsn “-^ h
cmn , # ; R const Flagsn “+^ h
tst , # ; R const Flagsn “/^ h
teq , # ; R const Flagsn “5^ h

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 , [, {, LSL #}]
str , [, {, LSL #}]

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 , [, {, LSL #}]
str , [, {, LSL #}]

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

Meanings Flags
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, Always any

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} {,} , ; Rd := (Rn*Rm)

mla , ,, ; Rd := Ra + (Rn*Rm)
mls , ,, ; Rd := Ra – (Rn*Rm)

udiv , , ; Rd := unsigned (Rn/Rm); rounded towards 0
sdiv , , ; Rd := signed (Rn/Rm); rounded towards 0

32 bit to 64 bit

umull ,,, ; RdHi:RdLo := unsigned ( (Rn*Rm))
umlal ,,, ; RdHi:RdLo := unsigned (RdHi:RdLo + (Rn*Rm))

smull ,,, ; RdHi:RdLo := signed ( (Rn*Rm))
smlal ,,, ; RdHi:RdLo := signed (RdHi:RdLo + (Rn*Rm))

… 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 [, ] ; for tables of offset bytes (8 bit)
tbh [, , lsl #1] ; for tables of offset halfwords (16 bit)

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 [, ] ; for tables of offset bytes (8 bit)
tbh [, , lsl #1] ; for tables of offset halfwords (16 bit)

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