Lecture 4 MIPS Instruction Set Todays topic More

  • Slides: 18
Download presentation
Lecture 4: MIPS Instruction Set • Today’s topic: § More MIPS instructions for math

Lecture 4: MIPS Instruction Set • Today’s topic: § More MIPS instructions for math and control § Code examples 1

Immediate Operands • An instruction may require a constant as input • An immediate

Immediate Operands • An instruction may require a constant as input • An immediate instruction uses a constant number as one of the inputs (instead of a register operand) • Putting a constant in a register requires addition to register $zero (a special register that always has zero in it) -- since every instruction requires at least one operand to be a register • For example, putting the constant 1000 into a register: addi $s 0, $zero, 1000 2

Example int a, b, c, d[10]; addi $s 0, $zero, 1000 # the program

Example int a, b, c, d[10]; addi $s 0, $zero, 1000 # the program has base address # 1000 and this is saved in $s 0 # $zero is a register that always # equals zero addi $s 1, $s 0, 0 # this is the address of variable a addi $s 2, $s 0, 4 # this is the address of variable b addi $s 3, $s 0, 8 # this is the address of variable c addi $s 4, $s 0, 12 # this is the address of variable d[0] 3

Memory Instruction Format • The format of a load instruction: destination register source address

Memory Instruction Format • The format of a load instruction: destination register source address lw $t 0, 8($t 3) any register a constant that is added to the register in brackets 4

Memory Instruction Format • The format of a store instruction: source register source address

Memory Instruction Format • The format of a store instruction: source register source address sw $t 0, 8($t 3) any register a constant that is added to the register in brackets 5

Example Convert to assembly: C code: d[3] = d[2] + a; 6

Example Convert to assembly: C code: d[3] = d[2] + a; 6

Example Convert to assembly: C code: d[3] = d[2] + a; Assembly: # addi

Example Convert to assembly: C code: d[3] = d[2] + a; Assembly: # addi instructions as before lw $t 0, 8($s 4) # d[2] is brought into $t 0 lw $t 1, 0($s 1) # a is brought into $t 1 add $t 0, $t 1 # the sum is in $t 0 sw $t 0, 12($s 4) # $t 0 is stored into d[3] Assembly version of the code continues to expand! 7

Memory Organization • The space allocated on stack by a procedure is termed the

Memory Organization • The space allocated on stack by a procedure is termed the activation record (includes saved values and data local to the procedure) – frame pointer points to the start of the record and stack pointer points to the end – variable addresses are specified relative to $fp as $sp may change during the execution of the procedure • $gp points to area in memory that saves global variables • Dynamically allocated storage (with malloc()) is placed on the heap Stack Dynamic data (heap) Static data (globals) Text (instructions) 8

Another Version Convert to assembly: C code: d[3] = d[2] + a; Assembly: lw

Another Version Convert to assembly: C code: d[3] = d[2] + a; Assembly: lw lw add sw $t 0, 20($gp) # d[2] is brought into $t 0 $t 1, 0($gp) # a is brought into $t 1 $t 0, $t 1 # the sum is in $t 0, 24($gp) # $t 0 is stored into d[3] 9

Recap – Numeric Representations • Decimal 3510 = 3 x 101 + 5 x

Recap – Numeric Representations • Decimal 3510 = 3 x 101 + 5 x 100 • Binary 001000112 = 1 x 25 + 1 x 21 + 1 x 20 • Hexadecimal (compact representation) 0 x 23 or 23 hex = 2 x 161 + 3 x 160 0 -15 (decimal) 0 -9, a-f (hex) Dec 0 1 2 3 Binary 0000 0001 0010 0011 Hex 00 01 02 03 Dec 4 5 6 7 Binary 0100 0101 0110 0111 Hex Dec Binary 04 8 1000 05 9 1001 06 10 1010 07 11 1011 Hex Dec Binary 08 12 1100 09 13 1101 0 a 14 1110 0 b 15 1111 Hex 0 c 0 d 0 e 0 f 10

Instruction Formats Instructions are represented as 32 -bit numbers (one word), broken into 6

Instruction Formats Instructions are represented as 32 -bit numbers (one word), broken into 6 fields R-type instruction add $t 0, $s 1, $s 2 000000 10001 10010 01000 00000 6 bits 5 bits op rs rt rd shamt opcode source dest shift amt I-type instruction 6 bits 5 bits opcode rs lw 5 bits rt 100000 6 bits function $t 0, 32($s 3) 16 bits constant 11

Logical Operations Logical ops Shift Left Shift Right Bit-by-bit AND Bit-by-bit OR Bit-by-bit NOT

Logical Operations Logical ops Shift Left Shift Right Bit-by-bit AND Bit-by-bit OR Bit-by-bit NOT C operators << >> & | ~ Java operators MIPS instr << >>> & | ~ sll srl and, andi or, ori nor 12

Control Instructions • Conditional branch: Jump to instruction L 1 if register 1 equals

Control Instructions • Conditional branch: Jump to instruction L 1 if register 1 equals register 2: beq register 1, register 2, L 1 Similarly, bne and slt (set-on-less-than) • Unconditional branch: j L 1 jr $s 0 (useful for large case statements and big jumps) Convert to assembly: if (i == j) f = g+h; else f = g-h; 13

Control Instructions • Conditional branch: Jump to instruction L 1 if register 1 equals

Control Instructions • Conditional branch: Jump to instruction L 1 if register 1 equals register 2: beq register 1, register 2, L 1 Similarly, bne and slt (set-on-less-than) • Unconditional branch: j L 1 jr $s 0 (useful for large case statements and big jumps) Convert to assembly: if (i == j) f = g+h; else f = g-h; bne add j Else: sub Exit: $s 3, $s 4, Else $s 0, $s 1, $s 2 Exit $s 0, $s 1, $s 2 14

Example Convert to assembly: while (save[i] == k) i += 1; i and k

Example Convert to assembly: while (save[i] == k) i += 1; i and k are in $s 3 and $s 5 and base of array save[] is in $s 6 15

Example Convert to assembly: while (save[i] == k) i += 1; i and k

Example Convert to assembly: while (save[i] == k) i += 1; i and k are in $s 3 and $s 5 and base of array save[] is in $s 6 Loop: sll add lw bne addi j Exit: $t 1, $s 3, 2 $t 1, $s 6 $t 0, 0($t 1) $t 0, $s 5, Exit $s 3, 1 Loop 16

Registers • The 32 MIPS registers are partitioned as follows: § Register 0 :

Registers • The 32 MIPS registers are partitioned as follows: § Register 0 : $zero § Regs 2 -3 : $v 0, $v 1 § Regs 4 -7 : $a 0 -$a 3 § Regs 8 -15 : $t 0 -$t 7 § Regs 16 -23: $s 0 -$s 7 § Regs 24 -25: $t 8 -$t 9 § Reg 28 : $gp § Reg 29 : $sp § Reg 30 : $fp § Reg 31 : $ra always stores the constant 0 return values of a procedure input arguments to a procedure temporaries variables more temporaries global pointer stack pointer frame pointer return address 17

Title • Bullet 18

Title • Bullet 18