L5 – Addressing Modes 1 Comp 411 – Spring 2008 1/29/08 Operands and Addressing Modes Where is the data? Addresses as data Names and Values Indirection.

Slides:



Advertisements
Similar presentations
Henk Corporaal TUEindhoven 2011
Advertisements

1 Lecture 3: MIPS Instruction Set Today’s topic:  More MIPS instructions  Procedure call/return Reminder: Assignment 1 is on the class web-page (due.
Goal: Write Programs in Assembly
4.
Review of the MIPS Instruction Set Architecture. RISC Instruction Set Basics All operations on data apply to data in registers and typically change the.
Lecture 5: MIPS Instruction Set
Branches Two branch instructions:
The University of Adelaide, School of Computer Science
1 ECE462/562 ISA and Datapath Review Ali Akoglu. 2 Instruction Set Architecture A very important abstraction –interface between hardware and low-level.
1 ECE369 ECE369 Chapter 2. 2 ECE369 Instruction Set Architecture A very important abstraction –interface between hardware and low-level software –standardizes.
1 Procedure Calls, Linking & Launching Applications Lecture 15 Digital Design and Computer Architecture Harris & Harris Morgan Kaufmann / Elsevier, 2007.
10/9: Lecture Topics Starting a Program Exercise 3.2 from H+P Review of Assembly Language RISC vs. CISC.
The University of Adelaide, School of Computer Science
ITCS 3181 Logic and Computer Systems 2015 B. Wilkinson slides3.ppt Modification date: March 16, Addressing Modes The methods used in machine instructions.
1 Today’s lecture  Last lecture we started talking about control flow in MIPS (branches)  Finish up control-flow (branches) in MIPS —if/then —loops —case/switch.
1 Nested Procedures Procedures that don't call others are called leaf procedures, procedures that call others are called nested procedures. Problems may.
The University of Adelaide, School of Computer Science
ENEE350 Spring07 1 Ankur Srivastava University of Maryland, College Park Adapted from Computer Organization and Design, Patterson & Hennessy, © 2005.”
Computer Structure - The Instruction Set (2) Goal: Implement Functions in Assembly  When executing a procedure (function in C) the program must follow.
S. Barua – CPSC 440 CHAPTER 2 INSTRUCTIONS: LANGUAGE OF THE COMPUTER Goals – To get familiar with.
RISC Concepts, MIPS ISA and the Mini–MIPS project
MIPS Instruction Set Advantages
9/29: Lecture Topics Memory –Addressing (naming) –Address space sizing Data transfer instructions –load/store on arrays on arrays with variable indices.
Lecture 4. Miscellaneous Addressing Mode, Memory Map, Pointer, and ASCII Prof. Taeweon Suh Computer Science Education Korea University ECM534 Advanced.
1 Branches and Procedure Calls Lecture 14 Digital Design and Computer Architecture Harris & Harris Morgan Kaufmann / Elsevier, 2007.
April 23, 2001Systems Architecture I1 Systems Architecture I (CS ) Lecture 9: Assemblers, Linkers, and Loaders * Jeremy R. Johnson Mon. April 23,
CSCI-365 Computer Organization Lecture Note: Some slides and/or pictures in the following are adapted from: Computer Organization and Design, Patterson.
Lecture 4: MIPS Instruction Set
Small constants are used quite frequently (50% of operands) e.g., A = A + 5; B = B + 1; C = C - 18; Solutions? Why not? put 'typical constants' in memory.
 1998 Morgan Kaufmann Publishers MIPS arithmetic All instructions have 3 operands Operand order is fixed (destination first) Example: C code: A = B +
Computer Architecture CSE 3322 Lecture 3 Assignment: 2.4.1, 2.4.4, 2.6.1, , Due 2/3/09 Read 2.8.
©These slides may be freely used, distributed, and incorporated into other works. 1 Addressing Modes For speed… we want fixed-size instructions, and they.
Computer Organization and Design Addressing Modes Montek Singh Wed, Sep 19, 2012 Lecture 6.
Computer Organization and Design Addressing Modes Montek Singh Sep 30, 2015 Lecture 7.
Chapter 2 CSF 2009 The MIPS Assembly Language. Stored Program Computers Instructions represented in binary, just like data Instructions and data stored.
Computer Organization Instructions Language of The Computer (MIPS) 2.
Computer Organization and Design Pointers, Arrays and Strings in C Montek Singh Sep 18, 2015 Lab 5 supplement.
Chapter 2 — Instructions: Language of the Computer — 1 Conditional Operations Branch to a labeled instruction if a condition is true – Otherwise, continue.
Addressing Modes. Register Addressing Immediate Addressing Base Addressing Indexed Addressing PC-Relative Addressing.
Computer Organization Instructions Language of The Computer (MIPS) 2.
Computer Organization Instructions Language of The Computer (MIPS) 2.
Pointers and Arrays in C and Assembly Language. Arrays Provide useful abstraction Match up to machine memory organization Array index computation –time.
Control Structures Computer Organization I 1 October 2009 © McQuain, Feng & Ribbens Conditional Control Structure if ( i < j ) goto A; else.
CSCI-365 Computer Organization Lecture Note: Some slides and/or pictures in the following are adapted from: Computer Organization and Design, Patterson.
Computer Organization and Design Pointers, Arrays and Strings in C
MIPS Instruction Set Advantages
CS2100 Computer Organisation
MIPS Coding Continued.
Lecture 4: MIPS Instruction Set
ELEN 468 Advanced Logic Design
These are slides from Comp411
RISC Concepts, MIPS ISA Logic Design Tutorial 8.
Instructions - Type and Format
Lecture 4: MIPS Instruction Set
Computer Organization and Design Addressing Modes
These are slides from Comp411
ECE232: Hardware Organization and Design
Operands and Addressing Modes
October 1 Programming Questions?
September 5 Fang-Yi’s Office Hours Friday 10am  12pm (and another TBD) Programming Language Issues (JAVA vs. C, Pointers vs. Arrays) Representations Instructions.
The University of Adelaide, School of Computer Science
Computer Organization and Design Assembly & Compilation
COMS 361 Computer Organization
COMS 361 Computer Organization
Addressing Modes Don Porter.
Computer Organization and Design Addressing Modes
Operands and Addressing Modes
9/27: Lecture Topics Memory Data transfer instructions
August 31 addresses Drop box Questions? 31 August 2004
Conditional Branching (beq)
Presentation transcript:

L5 – Addressing Modes 1 Comp 411 – Spring /29/08 Operands and Addressing Modes Where is the data? Addresses as data Names and Values Indirection

L5 – Addressing Modes 2 Comp 411 – Spring /29/08 Just enough C For our purposes C is almost identical to JAVA except: C has “functions”, JAVA has “methods”. function == method without “class”. A global method. C has “pointers” explicitly. JAVA has them but hides them under the covers.

L5 – Addressing Modes 3 Comp 411 – Spring /29/08 C pointers int i;// simple integer variable int a[10];// array of integers int *p;// pointer to integer(s) *(expression) is content of address computed by expression. a[k] == *(a+k) a is a constant of type “int *” a[k] = a[k+1] EQUIV *(a+k) = *(a+k+1)

L5 – Addressing Modes 4 Comp 411 – Spring /29/08 Legal uses of C Pointers int i;// simple integer variable int a[10];// array of integers int *p;// pointer to integer(s) p = &i;// & means address of p = a;// no need for & on a p = &a[5];// address of 6 th element of a *p// value of location pointed by p *p = 1;// change value of that location *(p+1) = 1;// change value of next location p[1] = 1;// exactly the same as above p++;// step pointer to the next element

L5 – Addressing Modes 5 Comp 411 – Spring /29/08 Legal uses of Pointers int i;// simple integer variable int a[10];// array of integers int *p;// pointer to integer(s) So what happens when p = &i; What is value of p[0]? What is value of p[1]?

L5 – Addressing Modes 6 Comp 411 – Spring /29/08 C Pointers vs. object size Does “p++” really add 1 to the pointer? NO! It adds 4. Why 4? char *q;... q++; // really does add 1

L5 – Addressing Modes 7 Comp 411 – Spring /29/08 Clear123 void clear1(int array[], int size) { for(int i=0; i<size; i++) array[i] = 0; } void clear2(int *array, int size) { for(int *p = &array[0]; p < &array[size]; p++) *p = 0; } void clear3(int *array, int size) { int *arrayend = array + size; while(array < arrayend) *array++ = 0; }

L5 – Addressing Modes 8 Comp 411 – Spring /29/08 Pointer summary In the “C” world and in the “machine” world: – a pointer is just the address of an object in memory – size of pointer is fixed regardless of size of object – to get to the next object increment by the object’s size in bytes – to get the the i th object add i*sizeof(object) More details: – int R[5]  R is int* constant address; 20 bytes storage – R[i]  *(R+i) – int *p = &R[3]  p = (R+3) (p points 12 bytes after R)

L5 – Addressing Modes 9 Comp 411 – Spring /29/08 Last Time - “Machine” Language Means, to MIPS, Reg[3] = Reg[4] + Reg[2] op = R-typeRdRt Rs bit (4-byte) ADD instruction: But, most of us would prefer to write a = b+c; add $3, $4, $2 or, better yet, (ASSEMBLER) (C) 0 func = add

L5 – Addressing Modes 10 Comp 411 – Spring /29/08 Revisiting Operands Operands – the variables needed to perform an instruction’s operation Three types in the MIPS ISA: – Register: add $2, $3, $4# operands are the “Contents” of a register – Immediate: addi $2,$2,1# 2 nd source operand is part of the instruction – Register-Indirect: lw $2, 12($28)# source operand is in memory sw $2, 12($28)# destination operand is memory Simple enough, but is it enough?

L5 – Addressing Modes 11 Comp 411 – Spring /29/08 MIPS can do these with appropriate choices for Ra and const Common “Addressing Modes” Absolute (Direct): lw $8, 0x1000($0) – Value = Mem[constant] – Use: accessing static data Indirect: lw $8, 0($9) – Value = Mem[Reg[x]] – Use: pointer accesses Displacement: lw $8, 16($9) – Value = Mem[Reg[x] + constant] – Use: access to local variables Indexed: – Value = Mem[Reg[x] + Reg[y]] – Use: array accesses (base+index) Memory indirect: – Value = Mem[Mem[Reg[x]]] – Use: access thru pointer in mem Autoincrement: – Value = Mem[Reg[x]]; Reg[x]++ – Use: sequential pointer accesses Autodecrement: – Value = Reg[X]--; Mem[Reg[x]] – Use: stack operations Scaled: – Value = Mem[Reg[x] + c + d*Reg[y]] – Use: array accesses (base+index) Argh! Is the complexity worth the cost? Need a cost/benefit analysis!

L5 – Addressing Modes 12 Comp 411 – Spring /29/08 Memory Operands: Usage Usage of different memory operand modes From Hennessy & Patterson

L5 – Addressing Modes 13 Comp 411 – Spring /29/08 Absolute (Direct) Addressing What we want: – The contents of a specific memory location Examples: Caveats – In practice $gp is used instead of $0 – Can only address the first and last 32K of memory this way – Sometimes generates a two instruction sequence: “C” int x = 10; main() { x = x + 1; } “MIPS Assembly”.data.global x x:.word 10.text.global main main: lw $2,x($0) addi $2,$2,1 sw $2,x($0) lui $1,xhighbits lw $2,xlowbits($1) Allocates space for a single integer (4-bytes) and initializes its value to 10

L5 – Addressing Modes 14 Comp 411 – Spring /29/08 Indirect Addressing What we want: – The contents of a memory location held in a register Examples: Caveats – You must make sure that the register contains a valid address (double, word, or short aligned as required) “C” int x = 10; main() { int *y = &x; *y = 2; } “MIPS Assembly”.data.global x x:.word 10.text.global main main: la $2,x addi $3,$0,2 sw $3,0($2) lui $2,xhighbits ori $2,$2,xlowbits “la” is not a real instruction, It’s a convenient pseudoinstruction that constructs a constant via either a 1 instruction or 2 instruction sequence ori $2,$0,x

L5 – Addressing Modes 15 Comp 411 – Spring /29/08 Displacement Addressing What we want: – The contents of a memory location relative to a register Examples: Caveats – Must multiply (shift) the “index” to be properly aligned “C” int a[5]; main() { int i = 3; a[i] = 2; } “MIPS Assembly”.data.global a a:.space 20.text.global main main: addi $2,$0,3 addi $3,$0,2 sll $1,$2,2 sw $3,a($1) Allocates space for a 5 uninitialized integers (20-bytes)

L5 – Addressing Modes 16 Comp 411 – Spring /29/08 Displacement Addressing: Once More What we want: – The contents of a memory location relative to a register Examples: Caveats – Constants offset to the various fields of the structure – Structures larger than 32K use a different approach “C” struct p { int x, y; } main() { p.x = 3; p.y = 2; } “MIPS Assembly”.data.global p p:.space 8.text.global main main: la $1,p addi $2,$0,3 sw $2,0($1) addi $2,$0,2 sw $2,4($1) Allocates space for 2 uninitialized integers (8-bytes)

L5 – Addressing Modes 17 Comp 411 – Spring /29/08 Conditionals C code: if (expr) { STUFF1 } else { STUFF2 } MIPS assembly: (compute expr in $rx) beq $rx, $0, Lelse (compile STUFF1) beq $0, $0, Lendif Lelse: (compile STUFF2) Lendif: C code: if (expr) { STUFF } MIPS assembly: (compute expr in $rx) beq $rx, $0, Lendif (compile STUFF) Lendif: There are little tricks that come into play when compiling conditional code blocks. For instance, the statement: if (y > 32) { x = x + 1; } compiles to: lw $24, y ori $15, $0, 32 slt $1, $15, $24 beq $1, $0, Lendif lw $24, x addi $24, $24, 1 sw $24, x Lendif:

L5 – Addressing Modes 18 Comp 411 – Spring /29/08 Loops MIPS assembly: Lwhile: (compute expr in $rx) beq $rX,$0,Lendw (compile STUFF) beq $0,$0,Lwhile Lendw: C code: while (expr) { STUFF } Alternate MIPS assembly: beq $0,$0,Ltest Lwhile: (compile STUFF) Ltest: ( compute expr in $rx ) bne $rX,$0,Lwhile Lendw: Compilers spend a lot of time optimizing in and around loops. - moving all possible computations outside of loops - unrolling loops to reduce branching overhead - simplifying expressions that depend on “loop variables”

L5 – Addressing Modes 19 Comp 411 – Spring /29/08 For Loops Most high-level languages provide loop constructs that establish and update an iteration variable, which is used to control the loop’s behavior MIPS assembly: sum:.word 0x0 data:.word 0x1, 0x2, 0x3, 0x4, 0x5.word 0x6, 0x7, 0x8, 0x9, 0xa add $30,$0,$0 Lfor: lw $24,sum($0) sll $15,$30,2 lw $15,data($15) addu $24,$24,$15 sw $24,sum add $30,$30,1 slt $24,$30,10 bne $24,$0,Lfor Lendfor: C code: int sum = 0; int data[10] = {1,2,3,4,5,6,7,8,9,10}; int i; for (i=0; i<10; i++) { sum += data[i] }

L5 – Addressing Modes 20 Comp 411 – Spring /29/08 Next Time We’ll write some real assembly code Play with a simulator Bring your Laptops!