View
216
Download
2
Embed Size (px)
Citation preview
Faculty of Computer Science
CMPUT 229 © 2006
Addressing Modes
Where to load from/store to
© 2006
Department of Computing Science
CMPUT 229
Immediate and Absolute Addressing
Immediate Addressing
• The value of the operand is contained in the instruction itself:
MOVE #1234, D0 [D0] 1234
ADD #1234, D0 [D0] [D0] + 1234
• Used to handle constants
– Value must be known when the program is written
Absolute Addressing
• The address that contain the operand is part of the instruction
MOVE 1234, D0 [D0] [1234]
ADD 1234, D0 [D0] [D0] + [1234]
• Slower than immediate addressing (requires an additional memory access)
• Value can change after the program is written
Clements, pp. 249
© 2006
Department of Computing Science
CMPUT 229
Address-Register Indirect Addressing
– The location of the value is in a pointer stored in an
address register:
ADD.B (A0), D0 [D0] [D0] + [[A0]]
Clements, pp. 252
COPYRIGHT 2006 OXFORD UNIVERSITY PRESS ALL RIGHTS RESERVED
© 2006
Department of Computing Science
CMPUT 229
Address-Register Indirect Addressing with Displacement– A constant is added to the value in an address register to
determine the memory location of the operand.
MOVE 4(A0), D0 [D0] [[A0]+4]
Clements, pp. 252
COPYRIGHT 2006 OXFORD UNIVERSITY PRESS ALL RIGHTS RESERVED
© 2006
Department of Computing Science
CMPUT 229
Postincrementing and Predecrementing
Automatically increments/decrements the address
register
MOVE.B (A0)+, D0 [D0] [[A0]];
[A0] [A0]+1
MOVE.W -(A2), (A3)+ [A2] [A2]-2;
[[A3]] [[A2]];
[A3] [A3]+2
Clements, pp. 253
COPYRIGHT 2006 OXFORD UNIVERSITY PRESS ALL RIGHTS RESERVED
© 2006
Department of Computing Science
CMPUT 229
Postincrementing and Predecrementing
Clements, pp. 253
COPYRIGHT 2006 OXFORD UNIVERSITY PRESS ALL RIGHTS RESERVED
© 2006
Department of Computing Science
CMPUT 229
Indexed Addressing
The address is given by two registers and a
constant displacement
MOVE.b Offset(A0, D0), D1 [D1] [[A0]+[D0]+Offset]
Clements, pp. 258
COPYRIGHT 2006 OXFORD UNIVERSITY PRESS ALL RIGHTS RESERVED
© 2006
Department of Computing Science
CMPUT 229
Indexed addressing (example)
PROBLEM: DIARY is a data structure divided into
weeks and days. The week is in D0 and the position
of a day within a week is given by a constant. Write
a program that accesses the entry for Tuesday of a
given week.
– The address of this location is given by
EntryAddress = DIARY + (WEEK-1)7+TUESDAY
© 2006
Department of Computing Science
CMPUT 229
Indexed addressing (example solution)
SUNDAY EQU 0
MONDAY EQU 1
TUESDAY EQU 2
WEDNESDAY EQU 3
…..
LEA DIARY, A0 A0 points to the begin of the data structure
MOVE.L WEEK, D0 D0 contains the week number
SUB.L #1, D0 D0 WEEK - 1
MULU #7, D0 D0 (WEEK - 1) 7
MOVE.B TUESDAY(A0,D0), D1 Access the required entry
EntryAddress = DIARY + (WEEK-1)7+TUESDAY
Clements, pp. 259
© 2006
Department of Computing Science
CMPUT 229
Relative Address
Same as the indirect addressing, but the register
used in the Program Counter (PC).
– Makes possible to relocate programs without changing
absolute addresses
MOVE d16(PC), D0 [D0] [[PC] + d16]
Clements, pp. 259
© 2006
Department of Computing Science
CMPUT 229
Relative Address
Clements, pp. 259
COPYRIGHT 2006 OXFORD UNIVERSITY PRESS ALL RIGHTS RESERVED
© 2006
Department of Computing Science
CMPUT 229
Relative Branching
The target address of most branches are also
expressed relative to the current value of the PC
© 2006
Department of Computing Science
CMPUT 229
Outer Product
Given two vectors, the outer product of these two
vectors is defined as follows
© 2006
Department of Computing Science
CMPUT 229
Exercise #2
Write a code whose inputs are in memory at the following addresses:
• $8000: word containing the length of vector u;
• $8002: long word with the address of the first position of u;
• $8006: word containing the length of vector v;
• $8008: long word with the address of the first position of v;
• $800C: long word with the address of the first position of matrix A;
The program has to compute the values in matrix A, where A is the outer product of u and v:
– A = u v
– A must be stored on a row-first order.
© 2006
Department of Computing Science
CMPUT 229
Flow-Graph Sketch Addresses/Sizes Initialization
i 0 counter for vector u
i = size of u?
j 0 counter for vector v
j = size of v?
A(i,j) = u(i)v(j)
j = j+1
i = i+1 yes
no
no
Done yes
A = u v
© 2006
Department of Computing Science
CMPUT 229
RTL Sketch
A0 L #$8000
D1 W (A0)+ length of vector u
A1 L (A0)+ address of vector u
D2 W (A0)+ length of vector v
A2 L (A0)+ address of vector v
A3 L (A0) address of matrix A
Write a code whose inputs are in memory at the following addresses:
• $8000: word containing the length of vector u;
• $8002: long word with the address of the first position of u;
• $8006: word containing the length of vector v;
• $8008: long word with the address of the first position of v;
• $800C: long word with the address of the first position of matrix A;
Address/Size Initialization
© 2006
Department of Computing Science
CMPUT 229
Flow-Graph Sketch
D3 W 0 counter for vector u
LoopU CMP D3,D1
BEQ Done
D4 W 0 counter for vector v
LoopV CMP D4,D2
BEQ nextU
<loop body>
D4 W D4+1 j j+1
BRA LoopV
nextU D3 W D3+1 i i+1
BRA LoopU
Done
A0 L #$8000
D1 W (A0)+ length of vector u
A1 L (A0)+ address of vector u
D2 W (A0)+ length of vector v
A2 L (A0)+ address of vector v
A3 L (A0) address of matrix A
Address/Size Initialization
Addresses/Sizes Initialization
i 0 counter for vector u
i = size of u?
j 0 counter for vector v
j = size of v?
A(i,j) = u(i)v(j)
j = j+1
i = i+1 yes
no
no
yesDone
© 2006
Department of Computing Science
CMPUT 229
Flow-Graph Sketch
D3 W 0 counter for vector u
LoopU CMP D3,D1
BEQ Done
D4 W 0 counter for vector v
LoopV CMP D4,D2
BEQ nextU
<loop body>
D4 W D4+1 j j+1
BRA LoopV
nextU D3 W D3+1 i i+1
BRA LoopU
Done
A0 L #$8000
D1 W (A0)+ length of vector u
A1 L (A0)+ address of vector u
D2 W (A0)+ length of vector v
A2 L (A0)+ address of vector v
A3 L (A0) address of matrix A
Address/Size Initialization
Addresses/Sizes Initialization
i 0 counter for vector u
i = size of u?
j 0 counter for vector v
j = size of v?
A(i,j) = u(i)v(j)
j = j+1
i = i+1 yes
no
no
yesDone
© 2006
Department of Computing Science
CMPUT 229
Flow-Graph Sketch
D3 W 0 counter for vector u
LoopU CMP D3,D1
BEQ Done
D4 W 0 counter for vector v
LoopV CMP D4,D2
BEQ nextU
<loop body>
D4 W D4+1 j j+1
BRA LoopV
nextU D3 W D3+1 i i+1
BRA LoopU
Done
A0 L #$8000
D1 W (A0)+ length of vector u
A1 L (A0)+ address of vector u
D2 W (A0)+ length of vector v
A2 L (A0)+ address of vector v
A3 L (A0) address of matrix A
Address/Size Initialization
Addresses/Sizes Initialization
i 0 counter for vector u
i = size of u?
j 0 counter for vector v
j = size of v?
A(i,j) = u(i)v(j)
j = j+1
i = i+1 yes
no
no
yesDone
© 2006
Department of Computing Science
CMPUT 229
Flow-Graph Sketch
D3 W 0 counter for vector u
LoopU CMP D3,D1
BEQ Done
D4 W 0 counter for vector v
LoopV CMP D4,D2
BEQ nextU
<loop body>
D4 W D4+1 j j+1
BRA LoopV
nextU D3 W D3+1 i i+1
BRA LoopU
Done
A0 L #$8000
D1 W (A0)+ length of vector u
A1 L (A0)+ address of vector u
D2 W (A0)+ length of vector v
A2 L (A0)+ address of vector v
A3 L (A0) address of matrix A
Address/Size Initialization
Addresses/Sizes Initialization
i 0 counter for vector u
i = size of u?
j 0 counter for vector v
j = size of v?
A(i,j) = u(i)v(j)
j = j+1
i = i+1 yes
no
no
yesDone
© 2006
Department of Computing Science
CMPUT 229
Flow-Graph Sketch
D3 W 0 counter for vector u
LoopU CMP D3,D1
BEQ Done
D4 W 0 counter for vector v
LoopV CMP D4,D2
BEQ nextU
<loop body>
D4 W D4+1 j j+1
BRA LoopV
nextU D3 W D3+1 i i+1
BRA LoopU
Done
A0 L #$8000
D1 W (A0)+ length of vector u
A1 L (A0)+ address of vector u
D2 W (A0)+ length of vector v
A2 L (A0)+ address of vector v
A3 L (A0) address of matrix A
Address/Size Initialization
Addresses/Sizes Initialization
i 0 counter for vector u
i = size of u?
j 0 counter for vector v
j = size of v?
A(i,j) = u(i)v(j)
j = j+1
i = i+1 yes
no
no
yesDone