Monday, September 15, 2008

Lecture 4

Lecture 4


 

  • Main memory is one long single memory array of cells
    • The cells are bytes
    • These are collapsed into words
      • Instructions are stored in words
      • Words take 4 bytes of main memory
  • Memory access
    • Data from memory to register
      • lw a, r(b)
        • Where 'b' is the base address
        • 'r' is the relative address
          • Relative address MUST be a constant, cannot be a variable
        • 'a' is the absolute (actual) address of register
    • Data to memory from register
      • sw a, r(b)
        • 'b' is base address
        • 'r' is relative address
          • Relative address MUST be a constant, cannot be a variable
        • 'a' is absolute address from register STORE WORD to register from main memory
  • Compile Assignment and using main memory
    • Change c program into MIPS
      • g = h + A[8]
    • MIPS program ( in Arial font)
      • lw $t0, 32($s3)
        • A[8]'s relative address is 32 ( 4*8 )
      • add $s1, $s2, $t0
    • multiplying with mips
      • using previous example how do i get 4*i (without just knowing it)?
        • add $t1, $s4, $s4
          • find four times i
        • add $t1, $t1, $t1
          • find absolute address
        • add $t1, $s3, $t1
          • t1 ß base + relative addresses
            • $s3 is the base address
        • Lw $t0, 0($t1)
          • Load
        • Add $s1, $s2, $t0
          • Add h + A[i]
    • Beq reg1, reg2, label
      • Operands (register1, register2, label)
      • If (r1=r2) then go to L1
    • Bne reg1, reg2, label
      • Operands; (register, register2, label)
      • If r1 != r2 then go to L2

---


 


 


 


 

If ( i == j ) then

    F = g + h

    Else

    F = g – h


 

If ( i != j ) then go to else

    F = g + h;

    Go to exit;

Else

    F = g – h;

Exit

MIPS

bne $s3, $s4, Else

add $s0, $s1, $s2

j Exit #jump to exit

Else: sub $s0, $s1, $s2

Exit:

Loops

Example:

Loop: g=g + A[i]

I=i+j;

If (i != h) go to loop;


 

Loop

  1. Get address of A[i]
  2. Load A[i]
  3. G ßg+A[i]
  4. I ßi+j
  5. If (i != h) go to loop

Steps 1-3 are the body, 4 is the modift, 5 is the stopping rule


 

MIPS

Loop: add $t1, $s3, $s3

Add $t1, $t1, $t1

Add $t1, $s5, $t1    #where $s5 is the base address of the array

Lw $t0, 0($t1)

Add $s1, $s1, $t0

Add $s3, $s3, $s4

Bne $s3, $s2, loop

Exit:


 


 

No comments: