Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand...

73
Instructions and Addressing (cont’d.)

Transcript of Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand...

Page 1: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Instructions and Addressing (cont’d.)

Page 2: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Index addressing (1)

opcode Reg index

instruction

operand

memoryor

registers

operand

+

registers

Page 3: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Index addressing (2)

• Advantages:- Allows specification of fixed offset to operand

address

• Disadvantages:- Extra addition to operand address

• Notation: ADD X(R1),R3 (X=number)• Meaning: [R3] [R3] + M([R1] + X)

Page 4: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Example index addressing

NE

Program with index addressing

programloop

sexagesalary

nEmpoyee IDsexagesalaryEmpoyee ID

L

Move #E,R0

Move N,R1

Clear R2

Add 8(R0),R2

Add #16,R0

Decrement R1

Branch>0 L

Div R1,R2

Move R2,Sum

Move N,R1

0(R0) 4(R0) 8(R0)12(R0)16(R0)20(R0)

Q1: What does this program do?

Page 5: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Additional modes

• Some computers have auto-increment (decrement instructions)

• Example: (R0)+• Meaning .. M(R0)..; [R0] [R0]+1• Example: -(R0)• Meaning [R0] [R0]-1; .. M(R0)..

Page 6: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

6

Additional Instructions

• Logic instructions- Not R0; invert all bits in R0- And #$FF000000,R0; AND with bit string

• Shift and rotate instructions- Many variants for different purposes

Page 7: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

7

Logical shifts

CR00

before:

after:

0

1

0 0 01 1 1 . . . 11

0 0 1 1 1 000

Logical shift leftLShiftL #2,R0

C R0 0

before:

after:

0

1

0 0 01 1 1 . . . 11

1 10 . . . 00101

. . .

used in bit Packing

virtual: 0 1 11 1 0 . . 010.

LShiftL #2,R0

LShiftL #1,R0

Logical shift rightLShiftR #2,R0

00 00 1 1 . . 101 .virtual:

LShiftR #2,R0

LShiftR #1,R0

Page 8: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

8

Arithmetic shifts

C

before:

after:

0

1

1 1 00 0 1 . . . 01

1 1 0 0 1 011

R0

. . .01 11 0 0 . . 101 .virtual:

AShiftR #2,R0

AShiftR #1,R0

Arithmetic shift right (signed shift)AShiftR #2,R0

Q1: AShiftR by n bits is equivalent to division by 2n for numbers in 2C or 1C?Q2: Rounding negative number shifts towards 0 or -infinity?T

ough

qu

estio

ns

Page 9: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

9

Rotate

Rotate left w/o CarryRotateL #2,R0

C R0

before:

after:

0

1

0 0 01 1 1 . . . 11

1 10 . . . 10101

virtual: 0 1 11 1 0 . . 010.

RotateL #2,R0

RotateL #1,R0

Rotate left w/ CarryRotateLC #2,R0

C R0

before:

after:

0

1

0 0 01 1 1 . . . 11

1 10 . . . 00101

virtual: 0 1 11 1 0 . . 010.

RotateLC #2,R0

RotateLC #1,R0

Page 10: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

10

Assemblershttp://www.pds.ewi.tudelft.nl/~iosup/Courses/2011_ti1400_5.ppt

Page 11: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Done so far…

Circuit Design

Digital logicMemory elementsOther building blocks (Multiplexer,Decoder)Finite State Machines

Lecture 1

Programmable Devices

Memory organizationProgram sequencingvon Neumann archi.Instruction levels

Lecture 2

History of Computing(1642-2011)

Why Computer Organization Matters?Lecture 0

ComputersLectures 3,4

Data representation, conversion, and op.Instruction representation and use

Page 12: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Problem: How to Program Computers?

Circuit Design

Digital logicMemory elementsOther building blocks (Multiplexer,Decoder)Finite State Machines

Lecture 1

Programmable Devices

Memory organizationProgram sequencingvon Neumann archi.Instruction levels

Lecture 2

Why Computer Organization Matters?Lecture 0

ComputersLectures 3,4

Data representation, conversion, and op.Instruction representation and use

Page 13: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

13

Program Creation and Execution Flow

editor

type sourceprogram

Source in ASCII

linker/loaderlink/load

memory imagerun input/output

machine 2

assembler listingtranslate

Source andObject code+error messages

object code

machine 1

Page 14: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Three levels of instructions

fetch/executeimplementation

program executionin hardware

high level programminglanguage

program expressed in ahigh-level language

translation

instruction set program expressed as a series of instructions

direct implementationAssembler

C/C++, Java, …

Page 15: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

15

Instructions and Addressing

1. Introduction2. Assembler: What and Why?3. Assembler Statements and Structure4. The Stack5. Subroutines6. Architectures: CISC and RISC

Page 16: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

16

Why assembler? [1/2]

• Assembler is a symbolic notation for machine language

• It improves readability (vs machine code):- Assembler: Move R0,SUM - Machine code: 0010 1101 1001 0001 (16 bits)

Page 17: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

17

Why assembler ? [2/2]

• Speed of programs in critical applications• Access to all hardware resources of the

machine• Target for compilers

Source: http://www.cs.berkeley.edu/~volkov/cs267.sp09/hw1/results/

Lecture 0

Page 18: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Q: Where to get ISA references?

• Manufacturer’s documentation

• Third-party manuals (ATTN: may be incorrect)

Page 19: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Q: Does each processor have its own machine language (instruction set)?• Shared across generations and even

competitors

www.eng.ucy.ac.cy/theocharides/Courses/ECE656/ia-32.pdf

developer.download.nvidia.com/compute/cuda/3_1/toolkit/docs/ptx_isa_2.1.pdf

1982

1985

1989

1993

1995

Intel

AMD

Cyrix

NVIDIA

Page 20: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

Q: Are similar instructions identical on different platforms?• Often, they are not

NVIDIAIntel

AMD

Cyrix

Page 21: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

21

Machine Language [1/4]

• Is Machine language difficult to learn?- That holds for every unknown language. Machine

language is more difficult because you have to work with the specifically defined micro instruction set.

• Is Machine language difficult to read and to understand?- Of course, if you do not know the language;

however, assembler is more difficult to read and understand than a High Level Language (HLL).

Page 22: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

22

Machine Language [2/4]

• Is Machine language difficult to write?- Often HLL languages use libraries to make programming

simpler. Machine language programmers often start from scratch. However, full performance may require machine language implementation (or a smart/expensive compiler)

• Machine language programming is time consuming- One estimates that the time for coding a program is only

30% of the total development time.

Page 23: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

23

Machine Language [3/4]

• Compilers make machine language superfluous- A good machine language program often looks very

different from a compiler generated program. Generally, a C program will win over a hand-made assembly program (unless you’re Michael Abrash … or a student at TU Delft)

- Assembler still heavily used for hot/optimized functions (esp. scientific codes), real-time platforms, embedded systems, …

Page 24: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

24

Machine Language [4/4]

• Is Machine language difficult to maintain?- Maintainable programs are not specifically dependent on

the language they are written in, but more on the way they are contructed

• Is Machine language difficult to debug?- Often debuggers output both the HLL and the machine

language, and the error can only be found in the generated machine language

Page 25: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

25

Case-in-Point

• Universele Brander Automaat (UBA)

Page 26: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

26

Case

Universele Brander AutomaatKlant: Nefit Fasto B.V.Markt: HVAC (AirCo)Ontwikkelen (1990) en produceren (100k/jaar) van de UBA universele brander- automaat voor Nefit Fasto voorzien van een bipolaire Application-Specific Integrated Circuit (ASIC).Eerste product met een universeel karakter, die een fail-safe approval heeft.

Page 27: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

27

Case

6 schakel ingangen8 analoge ingangen3 schakeluitgangen3 modulerende uitgangen2 draads communicatie bus

Externe KIM module aansluiting met 178 bytes config settings

230V , Pump and Fan

ASIC and micro-Computer

Ignition

Universele Brander Automaat

Page 28: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

28

UBA software opbouw

HWIO

Application

1 Kbyte

15 Kbyte

C- language

Page 29: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

29

UBA micro computer

HWIO

1 Kbytes

MC68HC05B16

24 I/O bi-directional8 A/D analogue inputs2 TCAP input timers2 TCMP output compare2 PWM D/A outputs1 SCI serial output 1 COP watchdog256 bytes RAM256 bytes EEPROM16 Kbytes (EP)ROM

Page 30: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

30

UBA PuR After Power up Reset special routine[ see also The Zen of Diagnostics, http://www.ganssle.com/articles/adiags1.htm ]

- all instruction set in test routine- 16-bit CRC (99,98% data integrity)

- Walking A0 and 05 RAM test (pattern sensitivity)- Check on A/D (converter linearity)

- Main loop partitioned in modules- Module check in each phase

- Acknowledge module check by pulse to ASIC (350ms)- Interrupt program termination check by pulse to ASIC (20ms)

Page 31: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

31

UBA Assembly

• Check instruction set- Test of each opcode over and over

again- Emergency stop at fault detection- Not possible in “C”

• Check memory- As part of the program- Emergency stop at fault detection- Difficult in “C”

• Better control on application- Compiler generated code must be

checked for correctness.

Page 32: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

32

Instructions and Addressing

1. Introduction2. Assembler: What and Why?3. Assembler Statements and Structure4. The Stack5. Subroutines6. Architectures: CISC and RISC

Page 33: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

33

Assembler Statements

• Declarations- no code generation- memory reservation- symbolic data declarations- where to start the code execution

• Executable statements- are translated to real machine instructions

(often, one-to-one)

Page 34: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

34

Data declarations

S EQU 200

ORIGIN 201

N DATA 300

N1 RESERVE 300

ORIGIN 100

Label operation operand

Page 35: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

35

Program

START Move N,R1

Addr operation operand

Move #N1,R2

Clear R0

LOOP Add (R2),R0

Incr R2

Decr R1

Branch>0 LOOP

Move R0,S

Return

End START

Page 36: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

36

Memory lay-out

Move N,R1100

..... 102

103

104

105

106

107

101

..... ..... ..... ..... Branch >0

200

300 202

203

501

201

..... ..... ..... .....

Nn

S

N

N1

Page 37: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

37

Structure assembler [1/3]

• Assembler is hardly more than substitution- substitute 0001 for Move- substitute 0000 0000 0000 0101 for #5

• Assembler is level above machine language• Assembler languages for different

architectures are alike, but not identical

Page 38: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

38

Structure assembler [2/3]

Assembler programs contain three kind of quantities:

• Absolute:- opcodes, contants: can be directly translated

• Relative:- addresses of instructions which are dependent of

final memory location

• Extern:- call to subroutines

Page 39: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

39

Structure assembler [3/3]

• Literals: constants in programs• Some assemblers act as if literals are

immediate operands• Example:

Load #1

is equivalent to:Load One

...

One: 1

Page 40: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

40

Number notation

• Numbers can be represented using various formats:

ADD #93,R1

orADD #%01011101,R1

orADD #$5D,R1

Page 41: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

41

Instructions and Addressing

1. Introduction2. Assembler: What and Why?3. Assembler Statements and Structure4. The Stack5. Subroutines6. Architectures: CISC and RISC

Page 42: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

The StackMain idea

- (Large?) Memory space used to store program data- Items are added to the stack through a PUSH operation- Items are removed from the stack through a POP

operation

Details- Often, a stack is a contiguous array of memory

locations- Often, any number of stacks can be set up by a

program- Often, only one stack can be used at a time

(changing the active stack possible at any time)Q1: Why use stacks?

Q2: Implications?

Page 43: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

43

Stack registers

SPPC

CPU

MainMemory

Stack Pointer

Page 44: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

44

Stack operations

70

300

20

10

60

SP

0

1

Page 45: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

45

Push

70

300

20

10

60

SP

Subtract #4,SPMove R0,(SP)

80

0

1

80 R0

or:Move R0,-(SP)

Page 46: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

46

Pop

70

300

20

10

60

SP

Move (SP),R0Add #4,SP80

0

1

70 R0

or:Move (SP)+,R0

Page 47: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

47

Instructions and Addressing

1. Introduction2. Assembler: What and Why?3. Assembler Statements and Structure4. The Stack5. Subroutines6. Architectures: CISC and RISC

Page 48: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

48

Subroutines

• More structure in programs• Mimics procedure and function calls in

High Level programming Languages (HLL)

Page 49: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

49

Calling mechanism

Call SUB

next instr.

200

204

................1000

................

RTS

204

204

PC Link

PC Link

Page 50: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

50

Question

Is a Link register sufficient ?

Page 51: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

51

Subroutine nesting

• For nesting of subroutines return address in link register must be stored

• Can be implemented by using stacks

Page 52: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

52

Subroutine stack

204

PC Link

Move Link, -(SP)

Stack

......

Move (SP)+, Link

RTS

subroutine

Page 53: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

53

Parameter passing (1)

• Through registers- fast- limited number of parameters- caller and callee must know where parameters

are placed

• Example:Move A,R0 Sub: Move R0,CCall Sub ......

RTS

Page 54: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

54

Parameter passing (2)

• Through memory- very flexible- slower than through registers

• Often implemented through Stack Pointer• Parameters are pushed on stack before

calling subroutine• Results are popped from stack after return• Subroutine needs registers

Page 55: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

55

Parameter passing (3)

Move #List, -(SP)Move N, -(SP)Call LISTADDMove 4(SP), SUMAdd #8, SP

calling subroutine

Stack

SP

Page 56: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

56

Parameter passing (3)

Move #List, -(SP)Move N, -(SP)Call LISTADDMove 4(SP), SUMAdd #8, SP

LISTSP

calling subroutine

Stack

Page 57: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

57

Parameter passing (3)

Move #List, -(SP)Move N, -(SP)Call LISTADDMove 4(SP), SUMAdd #8, SP

n

LIST

SP

calling subroutine

Stack

Page 58: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

58

Parameter passing (3)

Move #List, -(SP)Move N, -(SP)Call LISTADDMove 4(SP), SUMAdd #8, SP Return

n

LIST

SP

calling subroutine

Stack

Page 59: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

59

Parameter passing (3)

Move #List, -(SP)Move N, -(SP)Call LISTADDMove 4(SP), SUMAdd #8, SP

n

sum

SP

calling subroutine

Stack

Page 60: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

60

Parameter passing (3)

Move #List, -(SP)Move N, -(SP)Call LISTADDMove 4(SP), SUMAdd #8, SP

SP

calling subroutine

Stack

Page 61: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

61

Parameter passing (4)

[R0]

Return

n

LIST

Stack frameLISTADD Move R0, -(SP)...Move 16(SP), R1Move 20(SP), R2Clear R0

LOOP Add (R2), R0Decr R1Incr R2Branch>0 LOOPMove R0, 20(SP)Move (SP)+, R2.....Return

Subroutine

SP

Page 62: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

62

Parameter passing (4)

[R2]

[R1]

[R0]

Return

n

LIST

Stack frameLISTADD Move R0, -(SP)...Move 16(SP), R1Move 20(SP), R2Clear R0

LOOP Add (R2), R0Decr R1Incr R2Branch>0 LOOPMove R0, 20(SP)Move (SP)+, R2.....Return

Subroutine

SP

Page 63: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

63

Parameter passing (4)

[R2]

[R1]

[R0]

Return

n

sum

Stack frameLISTADD Move R0, -(SP)...Move 16(SP), R1Move 20(SP), R2Clear R0

LOOP Add (R2), R0Decr R1Incr R2Branch>0 LOOPMove R0, 20(SP)Move (SP)+, R2.....Return

Subroutine

SP 0(SP)

4(SP)

8(SP)

12(SP)

16(SP)

20(SP)20(SP)

Page 64: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

64

Parameter passing(4)

[R1]

[R0]

Return

n

sum

Stack frameLISTADD Move R0, -(SP)...Move 16(SP), R1Move 20(SP), R2Clear R0

LOOP Add (R2), R0Decr R1Incr R2Branch>0 LOOPMove R0, 20(SP)Move (SP)+, R2.....Return

Subroutine

SP

Page 65: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

65

Parameter passing (4)

Return

n

sum

Stack frameLISTADD Move R0, -(SP)...Move 16(SP), R1Move 20(SP), R2Clear R0

LOOP Add (R2), R0Decr R1Incr R2Branch>0 LOOPMove R0, 20(SP)Move (SP)+, R2.....Return

Subroutine

SP

Page 66: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

66

Frame Pointer

SP(stack pointer)

FP(frame pointer)

saved [R1]

saved [R0]

Stackframefor

calledsubroutine

Return address

localvar3

localvar2

localvar1

saved [FP]

Old ToS

param2

param1

param3

param4

(top-of-stack)

Access of local variablesof Subroutinethrough IndexAddressing on FP

Page 67: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

67

Re-entrancy

• Subroutines can be called more than once- Recursion: subroutine calls itself- Sub A calls Sub B, which in turn calls Sub A- Multiple callers “at the same time”

• Special measures for re-entrancy- No change of instructions- Each caller must have its own copy of data- Use stack(s)

Page 68: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

68

Instructions and Addressing

1. Introduction2. Assembler: What and Why?3. Assembler Statements and Structure4. The Stack5. Subroutines6. Architectures: CISC and RISC

Page 69: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

69

CISC characteristics

• Complex Instruction Set• Traditional architectures• Powerful instructions

- Complex operations- Many instructions

• Memory to memory operations• Programs often use stacks• Examples 68xxx and 80xxx architectures• The Pentium architecture

Memory CPU

Page 70: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

70

RISC characteristics

• Reduced Instruction Set• Small number of instructions• Load/Store from memory• Operations between registers• Large register sets• Example PowerPC architecture

Memory CPU

Page 71: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

Pro CISC

• Easier to program• Reduced code size• Complexity in hardware not in software

- HLL support in hardware

• (Politics) Legacy- CISCs are in all our PCs and servers

See also: http://arstechnica.com/cpu/4q99/risc-cisc/rvc-5.html

Page 72: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

Con CISC

• Instruction encoding complex• Variable number of cycles to load instruction

- IA-32 instructions can be 1—17 bytes long

• Many instructions too specific, thus not used• May be slow

- Stacks are in main memory, registers are near processor

• May consume more energy- Not in embedded systems, portable devices, …

Page 73: Instructions and Addressing (cont’d.). Index addressing (1) opcode Reg index instruction operand memory or registers operand + registers.

TU-DelftTI1400/11-PDS

Frequency of Instruction Use

Frequency of Use(logscale)

Instruction Rank

Source: http://www.eng.ucy.ac.cy/theocharides/Courses/ECE656/ia-32.pdf

50% code just 3 instructions (mov, call, jmp)

99% code under 50 instructions