217
CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis www.cs.tamu.edu/course-info/cpsc321/miket Adopted from notes by David A. Patterson, John Kubiatowicz, John Wawrzynek, and others. Copyright © 2001 University of California at Berkeley

CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

Embed Size (px)

Citation preview

Page 1: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

CPSC 321 Computer ArchitectureC, MIPS Assembly

and Instruction Set Architecture

Instructor Michael E. Thomadakiswww.cs.tamu.edu/course-info/cpsc321/miket

Adopted from notes by David A. Patterson, John Kubiatowicz, John Wawrzynek, and others.

Copyright © 2001

University of California at Berkeley

Page 2: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

C, MIPS Assemblyand Instruction Set ArchitectureOutline

● Introduction: C vs. MIPS Assembly

● Decisions in C and MIPS

● Procedures

● Logical and Shift Operations

● MIPS Instruction Representation

Page 3: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Texas A&M UniversityComputer Science Department

CPSC 321 Computer Architecture

Part IIntroduction to MIPS

Instruction Set ArchitectureInstructor Michael E. Thomadakiswww.cs.tamu.edu/course-info/cpsc321/miket

Adopted from notes by David A. Patterson, John Kubiatowicz, and others.

Copyright © 2001

University of California at Berkeley

Page 4: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

A Trsanslation Hierarchy• HLL progams first

compiled (possibly into assembly), then linked and finally loaded into main memory.

Assembler

Assembly language program

Compiler

C program

Linker

Executable: Machine language program

Loader

Memory

Object: Machine language module Object: Library routine (machine language)

Page 5: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

MIPS R3000 Instruction Set Architecture (Summary)

° Machine Environment Target° Instruction Categories

• Load/Store• Computational• Jump and Branch• Floating Point (coprocessor)• Memory Management• Special

OP Rs Rt rd sa funct

OP Rs Rt Immediate

OP jump target

3 Instruction Formats: all 32 bits wide

R0 - R31

PCHILO

Registers

I:R:

J:

Page 6: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

MIPS Addressing Formats (Summary)

• How memory can be addressed in MIPS

Byte Halfword Word

Registers

Memory

Memory

Word

Memory

Word

Register

Register

1. Immediate addressing

2. Register addressing

3. Base addressing

4. PC-relative addressing

5. Pseudodirect addressing

op rs rt

op rs rt

op rs rt

op

op

rs rt

Address

Address

Address

rd . . . funct

Immediate

PC

PC

+

+

Page 7: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Machine Language Instructions

° Design Goals [Burks, Coldstine, Von Neuman, 1947]:• Simplicity in resources each instruction needs,• Clarity in definition and application,• Efficient implementation by underlying h/w.

° More primitive than higher level languages• e.g., no sophisticated control flow

° Very restrictivee.g., MIPS Arithmetic Instructions

° We’ll be working with the MIPS instruction set architecture ( www.mips.org definitive site )

• similar to other architectures developed since the 1980's• used by NEC, Nintendo, Silicon Graphics, Sony

Design goals (2001): maximize performance and minimize cost, reduce design time

Page 8: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Review C Operators/Operands (1/2)• Operators: +, -, *, /, % (mod); (7/4==1, 7%4==3)• Operands:

– Variables: fahr, celsius– Constants: 0, 1000, -17, 15.4

• In C (and most High Level Languages) variables declared and given a type first• Example: int fahr, celsius; int a, b, c, d, e;

• This is the Computation Model by ``Side-Effects''.° Programs move from state to state by means of

assignments changing their state• Assignment Statement:

Variable = expression, e.g.,celsius = 5*(fahr-32)/9;a = b+c+d-e;

Page 9: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

C Operators/Operands Examples

a = b + c;a = b + c + d - e;celsius = 5 * (fahr - 32) / 9;° Called Assignment statements° v

new= E(V

old);

° l-value = r-value Û address(object) = value(E)° E(V

old) an expression to be evaluated;

° Vold

many variables (possibly);° v

new is the variable affected by the assignment

Page 10: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Operators

° Syntax of Assembly Operator1) operation by name ``Mnemonics''2) operand getting result Register or

Memory3) 1st operand for operation4) 2nd operand for operation

° Ex. add b to c and put the result in a:• add a, b, c• Called an Assembly Language Instruction

° Equivalent assignment statement in C: • a = b + c;

Page 11: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Operators/Instructions

°MIPS Assembly Syntax is rigid: 1 operation, 3 variables• Why? Keep Hardware simple via regularity

° How to do the following C statement? a = b + c + d - e;

° Break into multiple instructions add a, b, c # a = sum of b & cadd a, a, d # a = sum of b,c,d sub a, a, e # a = b+c+d-e

° To right of sharp sign (#) is a comment terminated by end of the line• C comments have format /* comment */ , can

span many lines

Page 12: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Operators/Intructions

° Note: Unlike C (and most other HLLs), each line of assembly contains at most one instruction

add a,b,c add d,e,f WRONG

add a,b,cadd d,e,f RIGHT

Page 13: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Compilation° How to turn notation programmers prefer into

notation computer understands?

° Program to translate C statements into Assembly Language instructions; called a compiler

° Example: compile by hand this C code:a = b + c;d = a - e;

° Easy:

add a, b, csub d, a, e

° Big Idea: compiler translates notation from one level of computing abstraction to lower level

Page 14: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Compilation 2° Example: compile by hand this C code:

f = (g + h) - (i + j);

° First sum of g and h. Where to put result? add f, g, h # f contains g+h

° Now sum of i and j. Where to put result? • Cannot use f !

• Compiler creates temporary variable to hold sum: t1add t1,i,j # t1 contains i+j

° Finally produce differencesub f, f, t1 # f = (g+h)-(i+j)

Page 15: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Compilation 2 -- Summary

° C statement (5 operands, 3 operators): f = (g + h) - (i + j);

° Becomes 3 assembly instructions (6 unique operands, 3 operators):

add f,g,h # f contains g+hadd t1,i,j # t1 contains i+jsub f,f,t1 # f=(g+h)-(i+j)° In general, each line of C produces many

assembly instructions• One reason why people program in C vs.

Assembly; fewer lines of code• Other reasons? (many!)

Page 16: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Design: Key Concepts

• Assembly language is essentially directly supported in hardware, therefore ...

• It is kept very simple!

– Limit on the type of operands

– Limit on the set operations that can be done to absolute minimum • if an operation can be decomposed into a simpler operation,

don’t include it

Page 17: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Variables: Registers (1/4)

• Unlike HLL, assembly cannot use variables

– Why not? Keep Hardware Simple

• Assembly Operands are registers

– limited number of special locations built directly into the hardware

– operations can only be performed on these!

• Benefit: Since registers are directly in hardware, they are very fast

Page 18: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Variables: Registers (2/4)

• Drawback: Since registers are in hardware, there are a predetermined number of them

– Solution: MIPS code must be very carefully put together to efficiently use registers

• 32 registers in MIPS

– Why 32? Smaller is faster

• Each MIPS register is 32 bits wide

– Groups of 32 bits called a word in MIPS

Page 19: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Variables: Registers (3/4)

• Registers are numbered from 0 to 31

• Each register can be referred to by number or name

• Number references:

$0, $1, $2, … $30, $31

Page 20: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Variables: Registers (4/4)

• By convention, each register also has a name to make it easier to code

• For now:

$16 - $22➔ $s0 - $s7

(correspond to C variables)

$8 - $15 ➔ $t0 - $t7

(correspond to temporary variables)

• In general, use register names to make your code more readable

Page 21: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Comments in Assembly

• Another way to make your code more readable: comments!

• Hash (#) is used for MIPS comments

– anything from hash mark to end of line is a comment and will be ignored

• Note: Different from C.

– C comments have format /* comment */ , so they can span many lines

Page 22: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Instructions

• In assembly language, each statement (called an Instruction), executes exactly one of a short list of simple commands

• Unlike in C (and most other High Level Languages), where each line could represent multiple operations

Page 23: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Addition and Subtraction (1/4)

• Syntax of Instructions:

1 2, 3, 4

where:

1) operation by name

2) operand getting result (“destination”)

3) 1st operand for operation (“source1”)

4) 2nd operand for operation (“source2”)

• Syntax is rigid:

– 1 operator, 3 operands

– Why? Keep Hardware simple via regularity

Page 24: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Addition and Subtraction (2/4)

• Addition in Assembly

– Example (in MIPS): add $s0,$s1,$s2

– Equivalent to (in C): a = b + c

where registers $s0,$s1,$s2 are associated with variables a, b, c

• Subtraction in Assembly

– Example (in MIPS): sub $s3,$s4,$s5

Equivalent to (in C): d = e - f

where registers $s3, $s4, $s5 are associated with variables d, e, f

Page 25: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Addition and Subtraction (3/4)

• How to do the following C statement?

a = b + c + d - e;

• Break it into multiple instructions:

add $s0, $s1, $s2 # a = b + c

add $s0, $s0, $s3 # a = a + d

sub $s0, $s0, $s4 # a = a - e

• Notice: A single line of C may break up into several lines of MIPS.

• Notice: Everything after the hash mark on each line is ignored (comments)

Page 26: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Addition and Subtraction (4/4)

• How do we do this?

f = (g + h) - (i + j);

• Use intermediate temporary registeradd $s0,$s1,$s2 # f = g + hadd $t0,$s3,$s4 # t0 = i + j # need to save i+j, but # can’t use f, so use t0sub $s0,$s0,$t0 # f=(g+h)-(i+j)

Page 27: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Administrivia

• TBA

Page 28: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Immediates

• Immediates are numerical constants.

• They appear often in code, so there are special instructions for them.

• ``Add Immediate'':addi $s0, $s1, 10 (in MIPS)f = g + 10 (in C)

where registers $s0,$s1 are associated with variables f, g

• Syntax similar to add instruction, except that last argument is a number instead of a register.

Page 29: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Register Zero

• One particular immediate, the number zero (0), appears very often in code.

• So we define register zero ($0 or $zero) to always have the value 0.

• This is defined in hardware, so an instruction likeaddi $0, $0, 5will not do anything.

• Use this register, it’s very handy!

Page 30: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Operands: Memory

• C variables map onto registers; what about large data structures like arrays?

• 1 of 5 components of a computer: memory contains such data structures

• But MIPS arithmetic instructions only operate on registers, never directly on memory.

° Data transfer instructions transfer data between registers and memory:

– Memory to register

– Register to memory

Page 31: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Data Transfer: Memory to Reg (1/4)

• To transfer a word of data, we need to specify two things:

– Register: specify this by number (0 - 31)

– Memory address: more difficult

- Think of memory as a single one-dimensional array, so we can address it simply by supplying a pointer to a memory address.

- Other times, we want to be able to offset from this pointer.

Page 32: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Data Transfer: Memory to Reg (2/4)

• To specify a memory address to copy from, specify two things:

– A register which contains a pointer to memory

– A numerical offset (in bytes)

• The desired memory address is the sum of these two values.

• Example:8($t0)

– specifies the memory address pointed to by the value in $t0, plus 8 bytes

Page 33: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Data Transfer: Memory to Reg (3/4)

• Load Instruction Syntax:

1 2, 3(4)

– where

1) operation (instruction) name

2) register that will receive value

3) numerical offset in bytes

4) register containing pointer to memory

• Instruction Name:

– lw (meaning Load Word, so 32 bits or one word are loaded at a time)

Page 34: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Data Transfer: Memory to Reg (4/4)

• Example: lw $t0,12($s0)– This instruction will take the pointer in $s0, add 12

bytes to it, and then load the value from the memory pointed to by this calculated sum into register $t0

• Notes:

– $s0 is called the base register

– 12 is called the offset

– offset is generally used in accessing elements of array or structure: base reg points to beginning of array or structure

Page 35: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Data Transfer Instruction: Memory to Register° Load: moves data from a memory location

to register• Syntax:

1) operation name

2) register to be loaded

3) constant and register to access memory

°MIPS name, lw for load word: • Example: lw $t0, 8($s3)

Called "offset" Called "base register"or "base address register" or "base address"

Page 36: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Data Transfer: Reg to Memory (1/2)

• Also want to store value from a register into memory

• Store instruction syntax is identical to Load instruction syntax

• Instruction Name:

sw (meaning Store Word, so 32 bits or one word are loaded at a time)

Page 37: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Data Transfer: Reg to Memory (2/2)

• Example: sw $t0,12($s0)

This instruction will take the pointer in $s0, add 12 bytes to it, and then store the value from register $t0 into the memory address pointed to by the calculated sum

Page 38: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Pointers vs. Values

° Key Concept: A register can hold any 32-bit value. That value can be a (signed) int, an unsigned int, a pointer (memory address), etc.

• If you writelw $t2,0($t0)then, $t0 better contain a pointer

• What if you writeadd $t2,$t1,$t0then, $t0 and $t1 must contain?

Page 39: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Addressing: Byte vs. word

• Every word in memory has an address, similar to an index in an array

• Early computers numbered words like C numbers elements of an array:

– Memory[0], Memory[1], Memory[2], …

Called the ``address'' of a word

• Computers needed to access 8-bit bytes as well as words (4 bytes/word)

• Today machines address memory as bytes, hence word addresses differ by 4

– Memory[0], Memory[4], Memory[8], …

Page 40: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Compilation with Memory• What offset in lw to select A[8] in C?

• 4x8=32 to select A[8]: byte vs. word

• Compile by hand using registers:g = h + A[8];

– g: $s1, h: $s2, $s3: base address of A

• 1st transfer from memory to register:

lw $t0, 32($s3) # $t0 gets A[8]– Add 32 to $s3 to select A[8], put into $t0

• Next add it to h and place in gadd $s1, $s2, $t0 # $s1 = h + A[8]

Page 41: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Notes about Memory

• Pitfall: Forgetting that sequential word addresses in machines with byte addressing do not differ by 1.

– Many an assembly language programmer has toiled over errors made by assuming that the address of the next word can be found by incrementing the address in a register by 1 instead of by the word size in bytes.

– So remember that for both lw and sw, the sum of the base address and the offset must be a multiple of 4 (to be word aligned)

Page 42: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

More Notes about Memory: Alignment• MIPS requires that all words start at addresses that are

multiples of 4 bytes

• Called Alignment: objects must fall on address that is multiple of their size.

0 1 2 3

Aligned

NotAligned

Bytes in Word

Word Location

Page 43: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Role of Registers vs. Memory

• What if more variables than registers?

– Compiler tries to keep most frequently used variable in registers

– Writing less common to memory: spilling

• Why not keep all variables in memory?

– Smaller is faster:registers are faster than memory

– Registers more versatile: • MIPS arithmetic instructions can read 2, operate on them, and

write 1 per instruction

• MIPS data transfer only read or write 1 operand per instruction, and no operation

Page 44: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

“And in Conclusion…” (1/2)

• In MIPS Assembly Language:

– Registers replace C variables

– One Instruction (simple operation) per line

– Simpler is Better

– Smaller is Faster

• Memory is byte-addressable, but lw and sw access one word at a time.

• A pointer (used by lw and sw) is just a memory address, so we can add to it or subtract from it (using offset).

Page 45: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

“And in Conclusion…”(2/2)

• New Instructions:

add, addi,

sub

lw, sw

• New Registers:

C Variables: $s0 - $s7

Temporary Variables: $t0 - $t9

Zero: $zero

Page 46: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Texas A&M UniversityComputer Science Department

CPSC 321 Computer Architecture

Part IIDecisions in C

MIPS Assembly LanguageInstructor Michael E. Thomadakis

www.cs.tamu.edu/course-info/cpsc321/miket/Adopted from notes by David A. Patterson, John

Kubiatowicz, and others.

Copyright © 2001

University of California at Berkeley

Page 47: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Review (1/2)

• In MIPS Assembly Language:

– Registers replace C variables

– One Instruction (simple operation) per line

– Simpler is Better

– Smaller is Faster

• Memory is byte-addressable, but lw and sw access one word at a time.

• A pointer (used by lw and sw) is just a memory address, so we can add to it or subtract from it (using offset).

Page 48: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Review (2/2)

• New Instructions:

add, addi, sub, lw, sw

• New Registers:

C Variables: $s0 - $s7

Temporary Variables: $t0 - $t9

Zero: $zero

Page 49: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Overview

• C/Assembly Decisions: – if, if-else

• C/Assembly Loops: – while(){} , do {} while, for() {}

• Inequalities

• C Switch Statement

Page 50: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

So Far...

• All instructions have allowed us to manipulate data.

• So we’ve built a calculator.

• To build a computer, we need ability to make decisions…

• Heads up: pull out some papers and pens, you’ll do some in-class exercises today!

Page 51: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

C Decisions: if Statements

• 2 kinds of if statements in C

– if (condition) clause

– if (condition) clause1 else clause2

• Rearrange 2nd if into following:

if (condition) goto L1; clause2; go to L2;L1: clause1;

L2:

– Not as elegant as if - else, but same meaning

Page 52: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

MIPS Decision Instructions

• Decision instruction in MIPS:

– beq register1, register2, L1

– beq is “Branch if (registers are) equal” Same meaning as (using C): if (register1==register2) goto L1

• Complementary MIPS decision instruction

– bne register1, register2, L1

– bne is “Branch if (registers are) not equal” Same meaning as (using C): if (register1!=register2) goto L1

• Called conditional branches

Page 53: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

MIPS Goto Instruction• In addition to conditional branches, MIPS has an

unconditional branch:

j label

• Called a Jump Instruction: jump (or branch) directly to the given label without needing to satisfy any condition

• Same meaning as (using C):

goto label

• Technically, it’s the same as:

beq $0, $0, label

since it always satisfies the condition.

Page 54: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Compiling C if into MIPS (1/2)

• Compile by hand

if (i == j)

f = g+h;

else f = g-h;

• Use this mapping:–f: $s0, –g: $s1, –h: $s2, –i: $s3, –j: $s4

Exit

i == j?

f=g+h f=g-h

(false) i != j

(true) i == j

Page 55: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Compiling C if into MIPS (2/2)

°Final compiled MIPS code(fill in the blank): Exit

i == j?

f=g+h f=g-h

(false) i != j

(true) i == j

Page 56: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Loops in C/Assembly (1/3)

• Simple loop in Cdo { g = g + A[i]; i = i + j; } while (i != h);

• Rewrite this as:Loop: g = g + A[i]; i = i + j; if (i != h) goto Loop;

• Use this mapping:

g: $s1, h: $s2, i: $s3, j: $s4, base of A: $s5

Page 57: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Loops in C/Assembly (2/3)

• Final compiled MIPS code (fill in the blank):

Page 58: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Administrivia

• TBA

Page 59: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Loops in C/Assembly (3/3)

• There are three types of loops in C:– while– do… while– for

• Each can be rewritten as either of the other two, so the method used in the previous example can be applied to while and for loops as well.

° Key Concept: Though there are multiple ways of writing a loop in MIPS, conditional branch is key to decision making

Page 60: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Inequalities in MIPS (1/5)• Until now, we’ve only tested equalities (== and != in C).

General programs need to test < and > as well.

• Create a MIPS Inequality Instruction:– ``Set on Less Than''– Syntax: slt reg1, reg2, reg3– Meaning:– if (reg2 < reg3)– reg1 = 1;– else – reg1 = 0; – In computereeze, ``set'' means ``set to 1'',

``reset'' means ``set to 0''.

Page 61: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Inequalities in MIPS (2/5)

• How do we use this?

• Compile by hand:– if (g < h) goto Less;

• Use this mapping:– g: $s0, h: $s1

Page 62: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Inequalities in MIPS (4/5)

• Now, we can implement <, but how do we implement >, <= and >= ?

• We could add 3 more instructions, but:• MIPS goal: Simpler is Better

• Can we implement <= in one or more instructions using just slt and the branches?

• What about >?

• What about >=?

° 4 combinations of slt & beq/bneq

Page 63: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Inequalities in MIPS (5/5)

• 4 combinations of slt & beq/bneq:

slt $t0,$s0,$s1 # $t0 = 1 if g<h

bne $t0,$0,Less # if(g<h) goto Less

slt $t0,$s1,$s0 # $t0 = 1 if g>h

bne $t0,$0,Grtr # if(g>h) goto Grtr

slt $t0,$s0,$s1 # $t0 = 1 if g<h

beq $t0,$0,Gteq # if(g>=h) goto Gteq

slt $t0,$s1,$s0 # $t0 = 1 if g>h

beq $t0,$0,Lteq # if(g<=h) goto Lteq

Page 64: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Immediates in Inequalities

• There is also an immediate version of slt to test against constants: slti– Helpful in for loops

if (g >= 1) goto LoopC

MIPS

Page 65: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

What about unsigned numbers?

• there are unsigned inequality instructions:

sltu, sltiu

• which set result to 1 or 0 depending on unsigned comparisons

° $s0 = FFFF FFFAhex, $ s1 = 0000 FFFAhex

• What is the value of $t0, $t1?

• slt $t0, $s0, $s1

• sltu $t1, $s0, $s1

Page 66: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Example: The C Switch Statement (1/3)

• Choose among four alternatives depending on whether k has the value 0, 1, 2 or 3. Compile this C code:

switch (k) {– case 0: f=i+j; break; /* k=0*/– case 1: f=g+h; break; /* k=1*/– case 2: f=g–h; break; /* k=2*/– case 3: f=i–j; break; /* k=3*/– }

Page 67: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Example: The C Switch Statement (2/3)

• This is complicated, so simplify.

• Rewrite it as a chain of if-else statements, which we already know how to compile:– if(k==0) f=i+j;– else if(k==1) f=g+h;– else if(k==2) f=g–h;– else if(k==3) f=i–j;

• Use this mapping:– f: $s0, g: $s1, h: $s2, i: $s3, j: $s4, k: $s5

Page 68: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Things to Remember (1/2)

• Functions are called with jal, and return with jr $ra.

• The stack is your friend: Use it to save anything you need. Just be sure to leave it the way you found it.

° Register Conventions: Each register has a purpose and limits to its usage. Learn these and follow them, even if you’re writing all the code yourself.

Page 69: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Things to Remember (2/2)

• Instructions we know so far– Arithmetic: add, addi, sub, addu, addiu, subu, sll

– Memory: lw, sw– Decision: beq, bne, slt, slti, sltu, sltiu

– Unconditional Branches (Jumps): j, jal, jr

• Registers we know so far– All of them!

Page 70: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Texas A&M UniversityComputer Science Department

CPSC 321 Computer Architecture

Part IIIProcedures

Instructor Michael E. Thomadakis

www.cs.tamu.edu/course-info/cpsc321/miket/Adopted from notes by David A. Patterson, John

Kubiatowicz, and others.

Copyright © 2001

University of California at Berkeley

Page 71: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Overview

• C Functions

• MIPS Instructions for Procedures

• The Stack

• Register Conventions

• Another Example

Page 72: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

C functionsmain() {int i,j,k,m;i = mult(j,k); ... ;m = mult(i,i); ...}/* really dumb mult function */int mult (int mcand, int mlier){int product;

product = 0; while (mlier > 0) { product = product + mcand; mlier = mlier -1; } return product;}

What information mustcompiler/programmer keep track of?

What instructions can accomplish this?

Page 73: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Function Call Bookkeeping

°Registers play a major role in keeping track of information for function calls.°Register conventions:

– Return address $ra– Arguments $a0, $a1, $a2, $a3– Return value $v0, $v1– Local variables $s0, $s1, … , $s7

• The stack is also used.• More on this later.

Page 74: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Instruction Support for Functions (1/4) ... sum(a,b);... /* a, b: $s0,$s1 */}int sum(int x, int y) {

return x+y;}

address1000 add $a0,$s0,$zero # x = a1004 add $a1,$s1,$zero # y = b 1008 addi $ra,$zero,1016 #$ra=10161012 j sum #jump to sum1016 ...

2000 sum: add $v0,$a0,$a1004 jr $ra # new instruction

C

MIPS

Page 75: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Instruction Support for Functions (2/4)• Single instruction to jump and save return address: jump

and link (jal)

• Before:

1008 addi $ra,$zero,1016 #$ra=10161012 j sum #go to sum

• After:

1012 jal sum # $ra=1016,go to sum

• Why have a jal? Make the common case fast: functions are very common.

Page 76: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Instruction Support for Functions (3/4)

• Syntax for jal (jump and link) is same as for j (jump):

jal label

• jal should really be called laj for “link and jump”:– Step 1 (link): Save address of next instruction into

$ra (Why next instruction? Why not current one?)

– Step 2 (jump): Jump to the given label

Page 77: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Instruction Support for Functions (4/4)

• Syntax for jr (jump register):

jr register

• Instead of providing a label to jump to, the jr instruction provides a register which contains an address to jump to.

• Only useful if we know exact address to jump to: rarely applicable.

• Very useful for function calls:

– jal stores return address in register ($ra)

– jr jumps back to that address

Page 78: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Nested Procedures (1/2)

int sumSquare(int x, int y) {return mult(x,x)+ y;

}

• Something called sumSquare, now sumSquare is calling mult.

• So there’s a value in $ra that sumSquare wants to jump back to, but this will be overwritten by the call to mult.

• Need to save sumSquare return address before call to mult.

Page 79: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Nested Procedures (2/2)

• In general, may need to save some other info in addition to $ra.

• When a C program is run, there are 3 important memory areas allocated:

– Static: Variables declared once per program, cease to exist only after execution completes

– Heap: Variables declared dynamically

– Stack: Space to be used by procedure during execution; this is where we can save register values

Page 80: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

C memory Allocation

0

¥Address

Code Program

Static Variables declaredonce per program

HeapExplicitly created space, e.g., malloc(); C pointers

StackSpace for saved procedure information$sp

stackpointer

Page 81: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Using the Stack (1/2)

• So we have a register $sp which always points to the last used space in the stack.

• To use stack, we decrement this pointer by the amount of space we need and then fill it with info.

• So, how do we compile this?int sumSquare(int x, int y) {

return mult(x,x)+ y;° }

Page 82: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Using the Stack (2/2)°Compile by hand

sumSquare: addi $sp, $sp, -8 #space on stack sw $ra, 4($sp) #save ret addr sw $a1, 0($sp) # save y

add $a1, $a0, $zero # mult(x,x) jal mult # call mult

lw $a1, 0($sp) # restore y

add $v0, $v0, $a1 # mult()+ y

lw $ra, 4($sp) # get ret addr

addi $sp, $sp, 8 # restore stack

jr $ra

Page 83: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Steps for Making a Procedure Call

1) Save necessary values onto stack.

2) Assign argument(s), if any.

3) jal call

4) Restore values from stack.

Page 84: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Rules for Procedures

• Called with a jal instruction, returns with a jr $ra

• Accepts up to 4 arguments in $a0, $a1, $a2 and $a3

• Return value is always in $v0 (and if necessary in $v1)

• Must follow register conventions (even in functions that only you will call)! So what are they?

Page 85: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

MIPS Registers (1/2)

The constant 0 $0 $zero

Reserved for Assembler $1 $at

Return Values $2-$3 $v0-$v1

Arguments $4-$7 $a0-$a3

Temporary $8-$15 $t0-$t7

Saved $16-$23 $s0-$s7

More Temporary $24-$25 $t8-$t9

Page 86: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

MIPS Registers (2/2)

Used by Kernel $26-27 $k0-$k1

Global Pointer $28 $gp

Stack Pointer $29 $sp

Frame Pointer $30 $fp

Return Address $31 $ra

• In general, feel free to use either the name or the number, but try not to use both within the same piece of code.

• We prefer names, they make code more readable.

Page 87: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Register Conventions (1/5)

• Caller: the calling function

• Callee: the function being called

• When callee returns from executing, the caller needs to know which registers may have changed and which are guaranteed to be unchanged.

° Register Conventions: A set of generally accepted rules as to which registers will be unchanged after a procedure call (jal) and which may be changed.

Page 88: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Register Conventions (2/5)

• $0: No Change. Always 0.

• $v0-$v1: Change. These are expected to contain new values.

• $a0-$a3: Change. These are volatile argument registers.

• $t0-$t9: Change. That’s why they’re called temporary: any procedure may change them at any time.

Page 89: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Register Conventions (3/5)

• $s0-$s7: No Change. Very important, that’s why they’re called saved registers. If the callee changes these in any way, it must restore the original values before returning.

• $sp: No Change. The stack pointer must point to the same place before and after the jal call, or else the caller won’t be able to restore values from the stack.

• $ra: Change. The jal call itself will change this register.

Page 90: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Register Conventions (4/5)

• What do these conventions mean?

– If function A calls function B, then function A must save any temporary registers that it may be using onto the stack before making a jal call.

– Function B must save any S (saved) registers it intends to use before garbling up their values

– Remember: Caller/callee need to save only temporary/saved registers they are using, not all registers.

Page 91: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Register Conventions (5/5)

• Note that, if the callee is going to use some s registers, it must:– save those s registers on the stack– use the registers– restore s registers from the stack– jr $ra

• With the temp registers, the callee doesn’t need to save onto the stack.

• Therefore the caller must save those temp registers that it would like to preserve though the call.

Page 92: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Other Registers

• $at: may be used by the assembler at any time; unsafe to use

• $k0-$k1: may be used by the kernel at any time; unsafe to use

• $gp: don’t worry about it

• $fp: don’t worry about it

• Note: Feel free to read up on $gp and $fp in Appendix A, but you can write perfectly good MIPS code without them.

Page 93: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Example: Compile This (1/5)

main() {int i,j,k,m; /* i-m:$s0-$s3 */ i = mult(j,k); ... ;m = mult(i,i); ...}int mult (int mcand, int mlier){int product; product = 0;while (mlier > 0) { product += mcand; mlier -= 1; }return product;}

Page 94: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Example: Compile This (2/5)

__start: add $a0, $s1, $0 # arg0 = j add $a1, $s2, $0 # arg1 = k jal mult # call mult add $s0, $v0, $0 # i = mult() ..

add $a0, $s0, $0 # arg0 = i

add $a1, $s0, $0 # arg1 = i

jal mult # call mult

add $s3, $v0, $0 # m = mult()...

done

Page 95: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Example: Compile This (3/5)

• Notes:

– main function ends with done, not jr $ra, so there’s no need to save $ra onto stack

– all variables used in main function are saved registers, so there’s no need to save these onto stack

Page 96: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Example: Compile This (4/5)

mult:add $t0,$0,$0 # prod = 0

Loop:slt $t1,$0,$a1 # mlr > 0?

beq $t1,$0,Fin # no => Fin add $t0,$t0,$a0 # prod += mc addi $a1,$a1,-1 # mlr -= 1 j Loop # goto Loop

Fin:

add $v0,$t0,$0 # $v0 = prod

jr $ra # return

Page 97: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Example: Compile This (5/5)

• Notes:

– no jal calls are made from mult and we don’t use any saved registers, so we don’t need to save anything onto stack

– temp registers are used for intermediate calculations (could have used s registers, but would have to save the caller’s on the stack.)

– $a1 is modified directly (instead of copying into a temp register) since we are free to change it

– result is put into $v0 before returning

Page 98: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Things to Remember (1/2)

• Functions are called with jal, and return with jr $ra.

• The stack is your friend: Use it to save anything you need. Just be sure to leave it the way you found it.

° Register Conventions: Each register has a purpose and limits to its usage. Learn these and follow them, even if you’re writing all the code yourself.

Page 99: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Things to Remember (2/2)

• Instructions we know so far

Arithmetic: add, addi, sub, addu, addiu, subu, sll

Memory: lw, sw

Decision: beq, bne, slt, slti, sltu, sltiu

Unconditional Branches (Jumps): j, jal, jr

• Registers we know so far

– All of them!

Page 100: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Texas A&M UniversityComputer Science Department

CPSC 321 Computer Architecture

Part IVLogical and Shift OperationsInstructor Michael E. Thomadakis

www.cs.tamu.edu/course-info/cpsc321/miket/Adopted from notes by David A. Patterson, John

Kubiatowicz, and others.

Copyright © 2001

University of California at Berkeley

Page 101: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Overview

• Logical Instructions

• Shifts

Page 102: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Bitwise Operations (1/2)

• Up until now, we’ve done arithmetic (add, sub,addi ), memory access (lw and sw), and branches and jumps.

• All of these instructions view contents of register as a single quantity (such as a signed or unsigned integer)

° New Perspective: View contents of register as 32 bits rather than as a single 32-bit number

Page 103: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Bitwise Operations (2/2)

• Since registers are composed of 32 bits, we may want to access individual bits (or groups of bits) rather than the whole.

• Introduce two new classes of instructions:

– Logical Operators

– Shift Instructions (we’ve seen sll already)

Page 104: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Logical Operators (1/4)

• How many of you have taken Math 55?

• Two basic logical operators:

– AND: outputs 1 only if both inputs are 1

– OR: outputs 1 if at least one input is 1

• In general, can define them to accept >2 inputs, but in the case of MIPS assembly, both of these accept exactly 2 inputs and produce 1 output

– Again, rigid syntax, simpler hardware

Page 105: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Logical Operators (2/4)

• Truth Table: standard table listing all possible combinations of inputs and resultant output for each

• Truth Table for AND and OR

A B AND OR

0 0 0 0

0 1 0 1

1 0 0 1

1 1 1 1

Page 106: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Logical Operators (3/4)

• Logical Instruction Syntax:

1 2,3,4

– where

1) operation name

2) register that will receive value

3) first operand (register)

4) second operand (register) orimmediate (numerical constant)

Page 107: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Logical Operators (4/4)

• Instruction Names:

– and, or: Both of these expect the third argument to be a register

– andi, ori: Both of these expect the third argument to be an immediate

• MIPS Logical Operators are all bitwise, meaning that bit 0 of the output is produced by the respective bit 0’s of the inputs, bit 1 by the bit 1’s, etc.

Page 108: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Uses for Logical Operators (1/3)

• Note that anding a bit with 0 produces a 0 at the

output while anding a bit with 1 produces the original bit.

• This can be used to create a mask.

– Example:

1011 0110 1010 0100 0011 1101 1001 1010

0000 0000 0000 0000 0000 1111 1111 1111

– The result of anding these two is:

0000 0000 0000 0000 0000 1101 1001 1010

Page 109: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Uses for Logical Operators (2/3)

• The second bitstring in the example is called a mask. It is used to isolate the rightmost 12 bits of the first bitstring by masking out the rest of the string (e.g. setting it to all 0s).

• Thus, the and operator can be used to set certain portions of a bitstring to 0s, while leaving the rest alone.

– In particular, if the first bitstring in the above example were in $t0, then the following instruction would mask it:

andi $t0,$t0,0xFFF

Page 110: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Uses for Logical Operators (3/3)

• Similarly, note that oring a bit with 1 produces a

1 at the output while oring a bit with 0 produces the original bit.

• This can be used to force certain bits of a string to 1s.

– For example, if $t0 contains 0x12345678, then after this instruction:

ori $t0, $t0, 0xFFFF

– … $t0 contains 0x1234FFFF (e.g. the high-order 16 bits are untouched, while the low-order 16 bits are forced to 1s).

Page 111: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Shift Instructions (1/4)

• Move (shift) all the bits in a word to the left or right by a number of bits.

– Example: shift right by 8 bits

0001 0010 0011 0100 0101 0110 0111 1000

0000 0000 0001 0010 0011 0100 0101 0110

– Example: shift left by 8 bits

0001 0010 0011 0100 0101 0110 0111 1000

0011 0100 0101 0110 0111 1000 0000 0000

Page 112: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Shift Instructions (2/4)

• Shift Instruction Syntax:

1 2,3,4

– where

1) operation name

2) register that will receive value

3) first operand (register)

4) shift amount (constant <= 32)

Page 113: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Shift Instructions (3/4)

• MIPS shift instructions:

1. sll (shift left logical): shifts left and fills emptied bits with 0s

2. srl (shift right logical): shifts right and fills emptied bits with 0s

3. sra (shift right arithmetic): shifts right and fills emptied bits by sign extending

Page 114: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Shift Instructions (4/4)

• Example: shift right arith by 8 bits

0001 0010 0011 0100 0101 0110 0111 1000

0000 0000 0001 0010 0011 0100 0101 0110

• Example: shift right arith by 8 bits

1001 0010 0011 0100 0101 0110 0111 1000

1111 1111 1001 0010 0011 0100 0101 0110

Page 115: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Uses for Shift Instructions (1/5)

• Suppose we want to isolate byte 0 (rightmost 8 bits) of a word in $t0. Simply use:

andi $t0, $t0, 0xFF

• Suppose we want to isolate byte 1 (bit 15 to bit 8) of a word in $t0. We can use:

andi $t0, $t0, 0xFF00

but then we still need to shift to the right by 8 bits...

Page 116: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Uses for Shift Instructions (2/5)

• Could use instead:

sll $t0, $t0, 16

srl $t0, $t0, 24

0001 0010 0011 0100 0101 0110 0111 1000

0101 0110 0111 1000 0000 0000 0000 0000

0000 0000 0000 0000 0000 0000 0101 0110

Page 117: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Uses for Shift Instructions (3/5)

• In decimal:

– Multiplying by 10 is same as shifting left by 1:

• 71410 x 1010 = 714010

• 5610 x 1010 = 56010

– Multiplying by 100 is same as shifting left by 2:

• 71410 x 10010 = 7140010

• 5610 x 10010 = 560010

– Multiplying by 10n is same as shifting left by n

Page 118: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Uses for Shift Instructions (4/5)

• In binary:

– Multiplying by 2 is same as shifting left by 1:

• 112 x 102 = 1102

• 10102 x 102 = 101002

– Multiplying by 4 is same as shifting left by 2:

• 112 x 1002 = 11002

• 10102 x 1002 = 1010002

– Multiplying by 2n is same as shifting left by n

Page 119: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Uses for Shift Instructions (5/5)

• Since shifting maybe faster than multiplication, a good compiler usually notices when C code multiplies by a power of 2 and compiles it to a shift instruction:

a *= 8; (in C)

would compile to:

sll $s0, $s0, 3 (in MIPS)

• Likewise, shift right to divide by powers of 2

– remember to use sra

Page 120: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Things to Remember (1/2)

• Logical and Shift Instructions operate on bits individually, unlike arithmetic, which operate on entire word.

• Use Logical and Shift Instructions to isolate fields, either by masking or by shifting back and forth.

Page 121: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Things to Remember (2/2)

• New Instructions:

and, andi, or, ori

sll, srl, sra

Page 122: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Texas A&M UniversityComputer Science Department

CPSC 321 Computer Architecture

Part VInstruction Representation -- 1

Instructor Michael E. Thomadakis

www.cs.tamu.edu/course-info/cpsc321/miket/Adopted from notes by David A. Patterson, John

Kubiatowicz, and others.

Copyright © 2001

University of California at Berkeley

Page 123: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Big Idea: Stored-Program Concept

• Computers built on 2 key principles:

1) Instructions are represented asnumbers.

2) Therefore, entire programs can be stored in memory to be read or written just like numbers (data).

• Simplifies SW/HW of computer systems:

•Memory technology for data also used for programs

Page 124: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Consequence #1: Everything Addressed

• Since all instructions and data are stored in memory as numbers, everything has a memory address: instructions, data words

– both branches and jumps use these

• C pointers are just memory addresses: they can point to anything in memory

– Unconstrained use of addresses can lead to nasty bugs; up to you in C; limits in Java

• One register keeps address of instruction being executed: “Program Counter” (PC)

– Basically a pointer to memory: Intel calls it Instruction Address Pointer, which is better

Page 125: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Consequence #2: Binary Compatibility• Programs are distributed in binary form

– Programs bound to specific instruction set

– Different version for Macintosh and IBM PC

• New machines want to run old programs (“binaries”) as well as programs compiled to new instructions

• Leads to instruction set evolving over time

• Selection of Intel 8086 in 1981 for 1st IBM PC is major reason latest PCs still use 80x86 instruction set (Pentium III); could still run program from 1981 PC today

Page 126: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Instructions as Numbers (1/2)

• Currently all data we work with is in words (32-bit blocks):

– Each register is a word.

– lw and sw both access memory one word at a time.

• So how do we represent instructions?

– Remember: Computer only understands 1s and 0s, so “add $t0,$0,$0” is meaningless.

– MIPS wants simplicity: since data is in words, make instructions be words...

Page 127: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Instructions as Numbers (2/2)

• One word is 32 bits, so divide instruction word into “fields”.

• Each field tells computer something about instruction.

• We could define different fields for each instruction, but MIPS is based on simplicity, so define 3 basic types of instruction formats:

– R-format

– I-format

– J-format

Page 128: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Instruction Formats

• J-format: used for j and jal

• I-format: used for instructions with immediates, lw and sw (since the offset counts as an immediate), and the branches (beq and bne),

• (but not the shift instructions; later)

• R-format: used for all other instructions

• It will soon become clear why the instructions have been partitioned in this way.

Page 129: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

R-Format Instructions (1/5)• Define “fields” of the following number of bits

each:

6 5 5 5 65

opcode rs rt rd functshamt

• For simplicity, each field has a name:

° Important: Each field is viewed as a 5- or 6-bit unsigned integer, not as part of a 32-bit integer.

– Consequence: 5-bit fields can represent any number 0-31, while 6-bit fields can represent any number 0-63.

Page 130: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

R-Format Instructions (2/5)

• What do these field integer values tell us?

– opcode: partially specifies what instruction it is (Note: This number is equal to 0 for all R-Format instructions.)

– funct: combined with opcode, this number exactly specifies the instruction

– Question: Why aren’t opcode and funct a single 12-bit field?

– Answer: We’ll answer this later.

Page 131: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

R-Format Instructions (3/5)

• More fields:

– rs (Source Register): generally used to specify register containing first operand

– rt (Target Register): generally used to specify register containing second operand (note that name is misleading)

– rd (Destination Register): generally used to specify register which will receive result of computation

Page 132: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

R-Format Instructions (4/5)

• Notes about register fields:

– Each register field is exactly 5 bits, which means that it can specify any unsigned integer in the range 0-31. Each of these fields specifies one of the 32 registers by number.

– The word “generally” was used because there are exceptions, such as:• mult and div have nothing important in the rd field since the

dest registers are hi and lo

• mfhi and mflo have nothing important in the rs and rt fields since the source is determined by the instruction

Page 133: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

R-Format Instructions (5/5)

• Final field:

– shamt: This field contains the amount a shift instruction will shift by. Shifting a 32-bit word by more than 31 is useless, so this field is only 5 bits (so it can represent the numbers 0-31).

– This field is set to 0 in all but the shift instructions.

• For a detailed description of field usage for each instruction, see back cover of textbook.

Page 134: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

R-Format Example (1/2)

• MIPS Instruction:

add $8,$9,$10

opcode = 0 (look up in table)

funct = 32 (look up in table)

rs = 9 (first operand)

rt = 10 (second operand)

rd = 8 (destination)

shamt = 0 (not a shift)

Page 135: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

R-Format Example (2/2)

• MIPS Instruction:

add $8, $9, $10

0 9 10 8 320

000000 01001 01010 01000 10000000000

binary representation:

Called a Machine Language Instruction

decimal representation:

Page 136: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Instructions (1/5)

• What about instructions with immediates?

– 5-bit field only represents numbers up to the value 31: immediates may be much larger than this

– Ideally, MIPS would have only one instruction format (for simplicity): unfortunately, we need to compromise

• Define new instruction format that is partially consistent with R-format:

– First notice that, if instruction has immediate, then it uses at most 2 registers.

Page 137: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Instructions (2/5)

• Define “fields” of the following number of bits each:

6 5 5 16

opcode rs rt immediate

• Again, each field has a name:

° Key Concept: Only one field is inconsistent with R-format. Most importantly, opcode is still in same location.

Page 138: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Instructions (3/5)

• What do these fields mean?

– opcode: same as before except that, since there’s no funct field, opcode uniquely specifies an I-format instruction

– This also answers question of why R-format has two 6-bit fields to identify instruction instead of a single 12-bit field: in order to be consistent with other formats.

Page 139: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Instructions (4/5)

• More fields:

– rs: specifies the only register operand (if there is one)

– rt: specifies register which will receive result of computation (this is why it’s called the target register “rt”)

Page 140: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Instructions (5/5)

• The Immediate Field:

– addi, slti, slitu, the immediate is sign-extended to 32 bits. Thus, it’s treated as a signed integer.

– 16 bits ➔ can be used to represent immediate up to 216 different values

– This is large enough to handle the offset in a typical lw or sw, plus a vast majority of values that will be used in the slti instruction.

Page 141: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Example (1/2)

• MIPS Instruction:

addi $21, $22, -50

opcode = 8 (look up in table)

rs = 22 (register containing operand)

rt = 21 (target register)

immediate = -50 (by default, this is decimal)

Page 142: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Example (2/2)

• MIPS Instruction:

addi $21, $22, -50

8 22 21 -50

001000 10110 10101 1111111111001110

decimal representation:

binary representation:

Page 143: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branches: PC-Relative Addressing (1/5)

• Use I-Format

opcode rs rt immediate

• opcode specifies beq vs. bne

• rs and rt specify registers to compare

• What can immediate specify?

– Immediate is only 16 bits

– PC is 32-bit pointer to memory

– So immediate cannot specify entire address to branch to.

Page 144: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branches: PC-Relative Addressing (2/5)

• How do we usually use branches?

– Answer: if-else, while, for

– Loops are generally small: typically up to 50 instructions

– Function calls and unconditional jumps are done using jump instructions (j and jal), not the branches.

• Conclusion: Though we may want to branch to anywhere in memory, a single branch will generally change the PC by a very small amount.

Page 145: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branches: PC-Relative Addressing (3/5)

• Solution: PC-Relative Addressing

• Let the 16-bit immediate field be a signed two’s complement integer to be added to the PC if we take the branch.

• Now we can branch +/- 215 bytes from the PC, which should be enough to cover any loop.

• Any ideas to further optimize this?

Page 146: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branches: PC-Relative Addressing (4/5)

• Note: Instructions are words, so they’re word aligned (byte address is always a multiple of 4, which means it ends with 00 in binary).

– So the number of bytes to add to the PC will always be a multiple of 4.

– So specify the immediate in words.

• Now, we can branch +/- 215 words from the PC (or +/- 217 bytes), so we can handle loops 4 times as large.

Page 147: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branches: PC-Relative Addressing (5/5)

• Final Calculation:

– If we don’t take the branch:

PC = PC + 4

– If we do take the branch:

PC = (PC + 4) + (immediate * 4)

– Observations• Immediate field specifies the number of words to jump,

which is simply the number of instructions to jump.

• Immediate field can be positive or negative.

• Due to hardware, add immediate to (PC+4), not to PC; will be clearer why later in course

Page 148: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branch Example (1/3)

• MIPS Code:Loop: beq $9, $0, End add $8, $8, $10 addi $9, $9, -1 j LoopEnd:

• Branch is I-Format:

opcode = 4 (look up in table)

rs = 9 (first operand)

rt = 0 (second operand)

immediate = ???

Page 149: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branch Example (2/3)

• MIPS Code:Loop: beq $9, $0, End add $8, $8, $10 addi $9, $9, -1 j LoopEnd:

• Immediate Field:

– Number of instructions to add to (or subtract from) the PC, starting at the instruction following the branch.

– In this case, immediate = 3

Page 150: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branch Example (3/3)

• MIPS Code:Loop: beq $9, $0, End add $8, $8, $10 addi $9, $9, -1 j LoopEnd:

4 9 0 3

decimal representation:

binary representation:

000100 01001 00000 0000000000000011

Page 151: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Things to Remember

• Simplifying MIPS: Define instructions to be same size as data (one word) so that they can use the same memory (can use lw and sw).

° Machine Language Instruction: 32 bits representing a single instruction

opcode rs rt immediate

opcode rs rt rd functshamtR

I

• Computer actually stores programs as a series of these.

Page 152: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Problems (1/3)

• Problem 1:

– Chances are that addi, lw, sw and slti will use immediates small enough to fit in the immediate field.

– What if too big?• We need a way to deal with a 32-bit immediate in any I-format

instruction.

Page 153: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Problems (2/3)

• Solution to Problem 1:

– Handle it in software

– Don’t change the current instructions: instead, add a new instruction to help out

• New instruction:

lui register, immediate

– stands for Load Upper Immediate

– takes 16-bit immediate and puts these bits in the upper half (high order half) of the specified register

– sets lower half to 0s

Page 154: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

I-Format Problems (3/3)• Solution to Problem 1 (continued):

– So how does lui help us?

– Example:

addi $t0, $t0, 0xABABCDCDbecomes:lui $at, 0xABABori $at, $at, 0xCDCDadd $t0, $t0, $at

– Now each I-format instruction has only a 16-bit immediate.

– An instruction that must be broken up is called a pseudoinstruction. (Note that $at was used in this code.)

Page 155: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Texas A&M UniversityComputer Science Department

CPSC 321 Computer Architecture

Part VIInstruction Representation -- 2Instructor Michael E. Thomadakis

www.cs.tamu.edu/course-info/cpsc321/miket/Adopted from notes by David A. Patterson, John

Kubiatowicz, and others.

Copyright © 2001

University of California at Berkeley

Page 156: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Review

• MIPS defines instructions to be same size as data (one word) so that they can use the same memory (can use lw and sw).

° Machine Language Instruction: 32 bits representing a single instruction

opcode rs rt immediate

opcode rs rt rd functshamtR

I

• Computer actually stores programs as a series of these.

Page 157: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Outline

• Review branch instruction encoding

• Jump instructions

° Disassembly

° Pointers to structures

Page 158: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branches: PC-Relative Addressing

• Branch Calculation:

– If we don’t take the branch:

PC = PC + 4

– If we do take the branch:

PC = (PC + 4) + (immediate * 4)

– Observations• Immediate field specifies the number of words to jump,

which is simply the number of instructions to jump.

• Immediate field can be positive or negative.

• Due to hardware, add immediate to (PC+4), not to PC; will be clearer why later in course

Page 159: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branch Example (1/3)

• MIPS Code:Loop: beq $9, $0, End add $8, $8, $10 addi $9, $9, -1 j LoopEnd:

• Branch is I-Format:

opcode = 4 (look up in table)

rs = 9 (first operand)

rt = 0 (second operand)

immediate = ???

Page 160: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branch Example (2/3)

• MIPS Code:Loop: beq $9, $0, End addi $8, $8, $10 addi $9, $9, -1 j LoopEnd:

• Immediate Field:

– Number of instructions to add to (or subtract from) the PC, starting at the instruction following the branch.

– In this case, immediate = 3

Page 161: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Branch Example (3/3)

• MIPS Code:Loop: beq $9, $0, End addi $8, $8, $10 addi $9, $9, -1 j LoopEnd:

4 9 0 3

decimal representation:

binary representation:

000100 01001 00000 0000000000000011

Page 162: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

J-Format Instructions (1/5)

• For branches, we assumed that we won’t want to branch too far, so we can specify change in PC.

• For general jumps (j and jal), we may jump to anywhere in memory.

• Ideally, we could specify a 32-bit memory address to jump to.

• Unfortunately, we can’t fit both a 6-bit opcode and a 32-bit address into a single 32-bit word, so we compromise.

Page 163: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

J-Format Instructions (2/5)

• Define “fields” of the following number of bits each:

6 bits 26 bits

opcode target address

• As usual, each field has a name:

° Key Concepts

– Keep opcode field identical to R-format and I-format for consistency.

– Combine all other fields to make room for target address.

Page 164: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

J-Format Instructions (3/5)

• For now, we can specify 26 bits of the 32-bit bit address.

• Optimization:

– Note that, just like with branches, jumps will only jump to word aligned addresses, so last two bits are always 00 (in binary).

– So let’s just take this for granted and not even specify them.

Page 165: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

J-Format Instructions (4/5)

• So, we can specify 28 bits of the 32-bit address.

• Where do we get the other 4 bits?

– By definition, take the 4 highest order bits from the PC.

– Technically, this means that we cannot jump to anywhere in memory, but it’s adequate 99.9999…% of the time, since programs aren’t that long.

– If we absolutely need to specify a 32-bit address, we can always put it in a register and use the jr instruction.

Page 166: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

J-Format Instructions (5/5)

• Summary:

– New PC = PC[31..28] || target address (26 bits) || 00

– Note: `||' means bit concatenation4 bits || 26 bits || 2 bits = 32-bit address

• Understand where each part came from!

Page 167: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Outline

° Review branch instruction encoding

° Jump instructions

• Disassembly

° Pointers to structures

Page 168: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Decoding Machine Language

• How do we convert 1s and 0s to C code?

Machine language => MAL => C

• For each 32 bits:

– Look at opcode: 0 means R-Format, 2 or 3 mean J-Format, otherwise I-Format.

– Use instruction type to determine which fields exist.

– Write out MIPS assembly code, converting each field to name, register number/name, or decimal/hex number.

– Logically convert this MIPS code into valid C code. Always possible? Unique?

Page 169: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Decoding Example (1/6)

• Here are six machine language instructions in hex:

00001025005402A100000304410200A5FFFF 8100001

• Let the first instruction be at address 4,194,30410 (0x00400000).

• Next step: convert to binary

Page 170: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Decoding Example (2/6)

• The six machine language instructions in binary:

0000000000000000000100000010010100000000000001010100000000101010000100010000000000000000000000110000000001000100000100000010000000100000101001011111111111111111 00001000000100000000000000000001

• Next step: separation of fields

Page 171: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Decoding Example (3/6)

• Fields separated based on opcode:

0 0 0 2 3700 0 5 8 420

4 8 0 +30 2 4 2 320

8 5 5 -12 1,048,577

• Next step: translate to MIPS instructions

Page 172: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Decoding Example (4/6)

• MIPS Assembly (Part 1):

0x00400000 or $2,$0,$00x00400004 slt $8,$0,$50x00400008 beq $8,$0,30x0040000c add $2,$2,$40x00400010 addi $5,$5,-10x00400014 j 0x100001

• Better solution: translate to more meaningful instructions (fix the branch/jump and add labels)

Page 173: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Decoding Example (5/6)

• MIPS Assembly (Part 2):

or $v0,$0,$0 Loop: slt $t0,$0,$a1 beq $t0,$0,Fin

add $v0,$v0,$a0addi $a1,$a1,-1 j Loop

Fin:

• Next step: translate to C code (be creative!)

Page 174: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Decoding Example (6/6)

• C code:

– Mapping: $v0: product $a0: mcand $a1: mplier

product = 0;hile (mplier > 0) {product += mcand;

mplier -= 1;

Page 175: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Outline

° Review branch instruction encoding

° Jump instructions

° Disassembly

• Pointers to structures

Page 176: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Code to Implement Pointers

• deferencing Þ data transfer in asm.

... = ... *p ...; Þ load (get value from location pointed to by p)load word (lw) if int pointer, load byte unsigned (lbu) if char pointer

*p = ...; Þ store (put value into location pointed to by p)

Page 177: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Code to Implement Pointers

c is int, has value 100, in memory at address 0x10000000, p in $a0, x in $s0

p = &c; /* p gets 0x10000000 */ x = *p; /* x gets 100 */*p = 200; /* c gets 200 */

# p = &c; /* p gets 0x10000000 */ lui $a0,0x1000 # p = 0x10000000

# x = *p; /* x gets 100 */ lw $s0, 0($a0) # dereferencing p

# *p = 200; /* c gets 200 */ addi $t0,$0,200 sw $t0, 0($a0) # dereferencing p

Page 178: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Pointers to structures

struct node {

struct node *next;

int value;

};

If p is a pointer to a node, declared

with struct node *p, then:

(*p).value or p->value for “value” field,

(*p).next or p->next for pointer to next node

value

value0

value

value

• C Example - linked list:

Page 179: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Linked-list in Cmain (void) { struct node *head, *temp, *ptr; int sum; /* create the nodes*/ head = (struct node *) malloc(sizeof(struct node)); head->value = 23; head->next = 0; temp = (struct node *) malloc(sizeof(struct node)); temp->next = head; temp->value = 42; head = temp; /* add up the values */ ptr = head; sum = 0; while (ptr != 0) { sum += ptr->value; ptr = ptr->next; }}

Page 180: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Linked-list in MIPS Assember (1/2)

# head:s0, temp:s1, ptr:s2, sum:s3# create the nodes

li $a0,8 # sizeof(node)jal malloc # the callmove $s0,$v0 # head gets resultli $t0,23sw $t0,4($s0) # head->value = 23sw $zero,0($s0)# head->next = NULL li $a0,8jal mallocmove $s1,$v0 # temp = mallocsw $s0,0($s1) # temp->next = headli $t0,42sw $t0,4($s1) # temp->value = 42

move $s0,$s1 # head = temp

Page 181: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Linked-list in MIPS Assember (2/2)

# head:s0, temp:s1, ptr:s2, sum:s3

# add up the values move $s2,$s0 # ptr = head move $s3,$zero # sum = 0

loop: beq $s2,$zero,exit # exit if done lw $t0,4($s2) # get value addu $s3,$s3,$t0 # compute new sum lw $s3,0($s2) # ptr = ptr->next j loop # repeat

exit: done

Page 182: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Summary

° Machine Language Instruction: 32 bits representing a single instruction

opcode rs rt immediateopcode rs rt rd functshamtR

IJ target addressopcode

• Branches use PC-relative addressing, Jumps use absolute addressing.

• Disassembly is simple and starts by decoding opcode field.

• Pointer dereferencing turns into sw/lw in MIPS assembler. Offset helps in structs.

Page 183: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Texas A&M UniversityComputer Science Department

CPSC 321 Computer Architecture

Part VIMIPS Assembly - MiscellaneousInstructor Michael E. Thomadakis

www.cs.tamu.edu/course-info/cpsc321/miket/Adopted from notes by David A. Patterson, John

Kubiatowicz, and others.

Copyright © 2001

University of California at Berkeley

Page 184: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Review• Logical and Shift Instructions operate on bits

individually, unlike add/sub, which operate on entire word.

sll, srl, sra, and, andi, or, ori

• Use logical and shift Instructions to isolate fields, either by masking or by shifting back and forth.

• Use shift left logical, sll,for multiplication by powers of 2,

• shift right arithmetic, sra,for division by powers of 2.

x/y = x+(y-1) shifted right by log(y)

Page 185: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Outline

• Loading/Storing Bytes

• Signed vs. Unsigned MIPS Instructions

• Pseudo-instructions

• Break

• Multiply/Divide

• Pointers and assembly language

Page 186: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Loading, Storing bytes

• In addition to word data transfers (lw, sw), MIPS has byte data transfers:

• load byte: lb

• store byte: sb

• same format as lw, sw

Page 187: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Loading, Storing bytes

• What do with other 24 bits in the 32 bit register?

– lb: sign extends to fill upper 24 bits

• Suppose byte at 100 has value 0x0F, byte at 200 has value 0xFF

lb $s0, 100($zero) # $s0 = ??

lb $s1, 200($zero) # $s1 = ??

• Multiple choice: $s0? $s1?

a) 15; b) 255; c) -1; d) -255; e) -15

Page 188: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Loading bytes

• Normally with characters don't want to sign extend

• MIPS instruction that doesn't sign extend when loading bytes:

load byte unsigned: lbu

Page 189: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Outline

• Loading/Storing Bytes

• Signed vs. Unsigned MIPS Instructions

• Pseudo-instructions

• Break

• Multiply/Divide

• Pointers and assembly language

Page 190: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Overflow in Arithmetic (1/2)

• Reminder: Overflow occurs when there is a mistake in arithmetic due to the limited precision in computers.

• Example (4-bit unsigned numbers):

+15 1111

+3 0011

+18 10010

– But we don’t have room for 5-bit solution, so the solution would be 0010, which is +2, and wrong.

Page 191: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Overflow in Arithmetic (2/2)• Some languages detect overflow (Ada), some don’t (C)

• MIPS solution is 2 kinds of arithmetic instructions to recognize 2 choices:– add (add), add immediate (addi) and subtract (sub)

cause overflow to be detected– add unsigned (addu), add immediate unsigned (addiu)

and subtract unsigned (subu) do not cause overflow detection

• Compiler selects appropriate arithmetic– MIPS C compilers produce addu, addiu, subu

Page 192: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Unsigned Inequalities• Just as unsigned arithmetic instructions:

addu, subu, addiu

(really "don't overflow" instructions)

• There are unsigned inequality instructions:

sltu, sltiu

but really do mean unsigned compare!

0x80000000 < 0x7fffffff signed (slt, slti)

0x80000000 > 0x7fffffff unsigned (sltu, sltiu)

Page 193: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Outline

• Loading/Storing Bytes

• Signed vs. Unsigned MIPS Instructions

• Pseudo-instructions

• Break

• Multiply/Divide

• Pointers and assembly language

Page 194: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

True Assembly Language

• Pseudo-instruction: A MIPS instruction that doesn’t turn directly into a machine language instruction.

• What happens with pseudoinstructions?

– They’re broken up by the assembler into several “real” MIPS instructions.

– But what is a “real” MIPS instruction?

Page 195: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Example Pseudoinstructions

Register Move

move reg2, reg1

Expands to:

add reg2, $zero, reg1

• Load Immediate

li reg, value

If value fits in 16 bits:

ori reg, $zero,value

else:

lui reg, upper 16 bits of value

ori reg, $zero,lower 16 bits

Page 196: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

True Assembly Language

• Problem:– When breaking up a pseudoinstruction, the assembler

may need to use an extra register.– If it uses any regular register, it’ll overwrite whatever

the program has put into it.

• Solution:– Reserve a register ($1 or $at) that the assembler will

use when breaking up pseudo-instructions.– Since the assembler may use this at any time, it’s not

safe to code with it.

Page 197: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Example Pseudoinstructions Rotate Right Instructionror reg, valueExpands to:srl $at, reg, valuesll reg, reg, 32-valueor reg, reg, $at

0

0

No operation instructionnopExpands to ?

Page 198: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

True Assembly Language

• MAL (MIPS Assembly Language): the set of instructions that a programmer may use to code in MIPS; this includes pseudoinstructions

• TAL (True Assembly Language): the set of instructions that can actually get translated into a single machine language instruction (32-bit binary string)

• A program must be converted from MAL into TAL before it can be translated into 1s and 0s.

Page 199: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Outline

• Loading/Storing Bytes

• Signed vs. Unsigned MIPS Instructions

• Pseudo-instructions

• Break

• Multiply/Divide

• Pointers and assembly language

Page 200: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Announcements

• Recheck web page for reading assignments. Some things have changed a bit.

– Now is a good time to get caught up on the reading.

Page 201: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Where are MIPS processors?

• Digital Entertainment:- Set-top Boxes, Personal

Video Recorders, Game Consoles, Digital Television

• Mobile Computing:- Palm & Pocket PCs,

Handheld PCs, Cars

• Office Automation:- Printers, Copiers, Network Computers, Scanners

• Consumer Electronics:- Digital Cameras, GPS Surveying, Smart Phones, Smart Cards, Robotic

Toys• Communications/Networking:

- Routers, Network Cards, Internet Servers

Page 202: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Outline

• Loading/Storing Bytes

• Signed vs. Unsigned MIPS Instructions

• Pseudo-instructions

• Break

• Multiply/Divide

• Pointers and assembly language

Page 203: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Multiplication (1/3)

• Paper and pencil example (unsigned):

Multiplicand 1000 8 Multiplier x1001 9 1000

0000 0000+1000

01001000

– m bits x n bits = m + n bit product

Page 204: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Multiplication (2/3)

• In MIPS, we multiply registers, so:

– 32-bit value x 32-bit value = 64-bit value

• Syntax of Multiplication:

– mult register1, register2

– Multiplies 32-bit values in specified registers and puts 64-bit product in special result registers:• puts upper half of product in hi

• puts lower half of product in lo

– hi and lo are 2 registers separate from the 32 general purpose registers

Page 205: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Multiplication (3/3)

• Example:

– in C: a = b * c;

– in MIPS:• let b be $s2; let c be $s3; and let a be $s0 and $s1 (since it

may be up to 64 bits)

mult $s2,$s3 # b*c mfhi $s0 # upper half of # product into $s0

mflo $s1 # lower half of # product into $s1

• Note: Often, we only care about the lower half of the product.

Page 206: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Division (1/3)

• Paper and pencil example (unsigned):

1001 Quotient Divisor 1000|1001010Dividend -1000

10 101 1010 -1000

10 Remainder(or Modulo result)

• Dividend = Quotient x Divisor + Remainder

Page 207: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Division (2/3)

• Syntax of Division:

– div register1, register2

– Divides 32-bit values in register 1 by 32-bit value in register 2: • puts remainder of division in hi

• puts quotient of division in lo

• Notice that this can be used to implement both the C division operator (/) and the C modulo operator (%)

Page 208: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Division (3/3)• Example:

– in C: a = c / d;

b = c % d;

– in MIPS:• let a be $s0; let b be $s1; let c be $s2; and let d be $s3

div $s2,$s3 # lo=c/d, hi=c%d mflo $s0 # get quotient mfhi $s1 # get remainder

Page 209: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

More Overflow Instructions

• In addition, MIPS has versions of these two arithmetic instructions for unsigned operands:

multu

divu

Page 210: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Outline

• Loading/Storing Bytes

• Signed vs. Unsigned MIPS Instructions

• Pseudo-instructions

• Break

• Multiply/Divide

• Pointers and assembly language

Page 211: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Common Problems with Pointers: Hilfinger

1. Some people do not understand the distinction between x = y and *x = *y

2. Some simply haven't enough practice in routine pointer-hacking, such as how to splice an element into a list.

3. Some do not understand the distinction between struct Foo x; and struct Foo *x;

4. Some do not understand the effects of p = &x and subsequent results of assigning through dereferences of p, or of deallocation of x.

Page 212: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Address vs. Value

• Fundamental concept of Comp. Sci.

• Even in Spreadsheets: select cell A1 for use in cell B1

A B1 100 1002

• Do you want to put the address of cell A1 in formula (=A1) or A1’s value (100)?

• Difference? When change A1, cell using address changes, but not cell with old value

Page 213: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Code to Implement Pointers

• deferencing Þ data transfer in asm.

– ... = ... *p ...; Þ load (get value from location pointed to by p)load word (lw) if int pointer, load byte unsigned (lbu) if char pointer

– *p = ...; Þ store (put value into location pointed to by p)

Page 214: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Assembly Code to Implement Pointers

c is int, has value 100, in memory at address 0x10000000, p in $a0, x in $s0

p = &c; /* p gets 0x10000000 */x = *p; /* x gets 100 */*p = 200; /* c gets 200 */ # p = &c; /* p gets 0x10000000 */lui $a0,0x1000 # p = 0x10000000 # x = *p; /* x gets 100 */lw $s0, 0($a0) # dereferencing p # *p = 200; /* c gets 200 */addi $t0,$0,200sw $t0, 0($a0) # dereferencing p

Page 215: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

Registers and Pointers

• Registers do not have addresses– registers cannot be pointed to– cannot allocate a variable to a register if it may have a

pointer to it

Page 216: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

C vs. Asm with Pointer Arithmeticint strlen(char *s) { char *p = s; /* p points to chars */ while (*p != ’\0’) p++; /* points to next char */ return p - s; /* end - start */ }mov $t0, $a0bu $t1, 0($t0) /* derefence p */eq $t1, $zero, ExitLoop: addi $t0, $t0, 1 /* p++ */lbu $t1, 0($t0) /* derefence p */bne $t1, $zero, LoopExit: sub $v0, $t1, $a0jr $ra

Page 217: CPSC 321 Computer Architecture C, MIPS Assembly and Instruction Set Architecture Instructor Michael E. Thomadakis

tamu CPSC 321 Computer Architecture © ucb MIPS Instructions and ISA 1

“And in Conclusion..”• MIPS Signed vs. Unsigned "overloaded" term

• Do/Don't sign extend (lb, lbu)• Don't overflow (addu, addiu, subu, multu, divu)• Do signed/unsigned compare (slt,slti/sltu,sltiu)

• Assembler uses $at to turn MAL into TAL

• MIPS mult/div instructions use hi, lo registers.

• Pointer dereferencing directly supported as load/store.