Professional Documents
Culture Documents
Demo Program From Lecture #1: Registers
Demo Program From Lecture #1: Registers
Registers
start
stop
MOV
ADD
ADD
ADD
total,
total,
total,
total,
stop
a
; Make the first number the subtotal
total, b ; Add the second number to the subtotal
total, c ; Add the third number to the subtotal
total, d ; Add the fourth number to the subtotal
mov total, a
total a
b
b
ARM7TDMI Registers
ARM7TDMI Registers
15 word-size registers, labelled r0, r1, ..., r14
Program Counter Register, PC, also labelled r15
Current Program Status Register (CPSR)
start
stop
MOV
ADD
ADD
ADD
r0,
r0,
r0,
r0,
stop
r1
r0, r2
r0, r3
r0, r4
;
;
;
;
00000000
00000000
00000000
00000000
00000000
00000000
00000004
00000008
0000000C
00000010
00000010
AREA
IMPORT
EXPORT
start
E1A00001
E0800002
E0800003
E0800004
MOV
ADD
ADD
ADD
r0,
r0,
r0,
r0,
EAFFFFFE
stop
stop
12 00000014
13 00000014
line address
number
r1
r0, r2
r0, r3
r0, r4
END
machine
code
original assembly
language program
6
Rn
31
16 15
0000
20 19
1 1E1 0
31
Rd
20 19
111000001000
0 000 0
28 27
1 080 0
24 23
20 19
12 11
0000
16 15
0 000 0
00000000
0 000 0
16 15
Rm
4 3
00000000
12 11
0010
4 3
0 000 0
12 11
0 000 0
8 7
0 021 0
4 3
32 bits =
4 bytes = 1 word
1. Fetch
instruction
at PC
address
3. Execute
the
instruction
PC
PC
PC
PC
PC
2. Decode
the
instruction
R0
R4
R8
R12
R1
R5
R9
R13
R2
R6
R10
R14
R3
R7
R11
R15
0xA0000134
0xA0000138
0xA000013C
0xA0000140
0xA0000144
0xA0000148
0xA000014C
0xA0000150
0xA0000154
0xA0000158
0xA000015C
0xA0000160
0xA0000164
0xA0000168
0xA000016C
0xA0000170
0xA0000174
????????
????????
E1A00001
E0800002
E0800003
E0800004
EAFFFFFE
????????
????????
????????
????????
????????
????????
????????
????????
????????
????????
Memory
8
Program Execution
Start Debug Session
32 bits =
4 bytes = 1 word
PC
Fetch-Decode-Execute
cycle resumes
What happens
when we reach
the end of our
program?
0x9FFFFFF8
0x9FFFFFFC
0xA0000000
0xA0000004
0xA0000008
0xA000000C
0xA0000010
0xA0000014
????????
????????
????????
E1A00001
????????
E0800002
????????
E0800003
????????
E0800004
????????
EAFFFFFE
????????
Memory
9
stop
MOV
MOV
MOV
r2, r0
r0, r1
r1, r2
stop
EOR
EOR
EOR
r0, r0, r1
r1, r0, r1
r0, r0, r1
stop
; temp <-- r0
; r0 <-- r1
; r1 <-- temp
Compare both
programs with respect
to instructions
executed and registers
used ...
start
stop
; r0 <-- r0 xor r1
; r1 <-- (r0 xor r1) xor r1 = r0
; r0 <-- (r0 xor r1) xor r0 = r1
10
Immediate Operands
Register operands
ADD Rd, Rn, Rm
MOV Rd, Rm
Often want to use constant values as operands, instead
of registers
ADD Rd, Rn, #x
MOV Rd, #x
e.g. Move the value 0 (zero) into register r0
MOV
r0, #0
; r0 <-- 0
e.g. Set r1 = r2 + 1
ADD
r1, r2, #1
; r1 <-- r2 + 1
11
stop
MUL
LDR
MUL
r0, r1, r1
r2, =4
r0, r2, r0
; result <-- x * x
; tmp <-- 4
; result <-- 4 * x * x
LDR
MUL
r2, =3
r2, r1, r2
; tmp <-- 3
; tmp <-- x * tmp
ADD
r0, r0, r2
stop
12
LoaD Register
...
...
...
LDR
MUL
r2, =3
r2, r1, r2
; tmp <-- 3
; tmp <-- x * tmp
...
...
...
LoaD Register instruction can be used to load any 32bit signed constant value into a register
LDR
13
MOV
r0, #7
MOV
r0, #7
r0, =7
LDR
r0, =7
r0, #0x4FE8
LDR
6 00000000 E59F0000
r0, =0x4FE8
LDR
r0, =0x4FE8
14
r2, r1, r2
; r2 <-- r1 * r2
MUL
r2, r1, r2
15