CS61C Machine Structures Lecture 4 C Assembler Arithmetic and Memory Access September 8 2000 David Patterson http www inst eecs berkeley edu cs61c cs61c L4 9 1 Overvie w C operators operands Variables in Assembly Registers Comments in Assembly Addition and Subtraction in Assembly Memory Access in Assembly cs61c L4 9 2 Review C Operators Operands 1 2 Operators mod 7 4 1 7 4 3 Operands Variables lower upper fahr celsius Constants 0 1000 17 15 4 Assignment Statement Variable expression Examples celsius 5 fahr 32 9 cs61c L4 9 a b c d e 3 C Operators Operands 1 2 In C and most High Level Languages variables declared first and given a type Example int fahr celsius char a b c d e Each variable can ONLY represent a value of the type it was declared as cannot mix and match int and char variables cs61c L4 9 4 Assembly Design Key Concepts Keep it simple Limit what can be a variable and what can t Limit types of operations that can be done to absolute minimum if an operation can be decomposed into a simpler operation don t include it cs61c L4 9 5 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 cs61c L4 9 6 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 cs61c L4 9 7 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 cs61c L4 9 8 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 names to make your code more readable cs61c L4 9 9 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 cs61c L4 9 10 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 each line of assembly code contains at most 1 instruction cs61c L4 9 11 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 cs61c L4 9 12 Addition and Subtraction 2 4 Addition in Assembly Example add s0 s1 s2 in MIPS Equivalent to a b c in C where registers s0 s1 s2 are associated with variables a b c Subtraction in Assembly Example sub s3 s4 s5 in MIPS Equivalent to d e f in C where registers s3 s4 s5 are associated with variables d e f cs61c L4 9 13 Addition and Subtraction 3 4 How do the following C statement a b c d e Break 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 cs61c L4 9 14 Addition and Subtraction 4 4 How do we do this f g h i j Use intermediate temporary register add s0 s1 s2 f g h add t0 s3 s4 t0 i j need to save i j but can t use f so use t0 sub s0 s0 t0 cs61c L4 9 f g h i j 15 Administrivia Project 1 due Midnight Lab 3 Your first MIPS program HW 2 due Mon 9 11 and HW3 9 18 online and available Reading assignment P H 3 1 3 3 3 5 3 8 page 145 cs61c L4 9 16 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 of a register cs61c L4instead 9 17 Immediates There is no Subtract Immediate in MIPS Why Limit types of operations that can be done to absolute minimum if an operation can be decomposed into a simpler operation don t include it addi s0 s1 10 in MIPS f g 10 in C where registers s0 s1 are associated with variables f g addi X subi X so no subi cs61c L4 9 18 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 eg add s0 s1 zero in MIPS f g in C where registers s0 s1 are associated with variables f g defined in hardware so an instruction addi 0 0 5 will not do anything cs61c L4 9 19 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 cs61c L4 9 Memory to register Register to memory 20 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 onedimensional 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 cs61c L4 9 21 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 cs61c L4 9 22 Data Transfer Memory to Reg 3 4 Load Instruction Syntax 1 2 3 4 where 1 operation name 2 register that will receive value 3 numerical offset in bytes 4 register containing pointer to memory Instruction Name lw meaning Load …
View Full Document
Unlocking...