pointers and LL Flashcards
(7 cards)
how do we get a pointer/adress in assembly?
lea R5, x[R0] ; R5 := &x
store R5, p[R5] p := &x
how do we get what follows p/given variable in sigma 16?
load R7, p[R0] ; R7 := p
load R8, 0[R7] ; R8 := *p
traverse LL in high level
translate to low level
sum := 0
Loop
if not (p /= nil && end) goto Done
x := (p).value;
sum := sum + x;
p := (p).next;
goto loop
Done
Halt
Translate to assembly
sum := 0
Loop
if not (p /= nil && end) goto Done
x := (p).value;
sum := sum + x;
p := (p).next;
goto loop
Done
Halt
; sum = R5
Loop
load R1, p[R0] ; R1 := p
cmp R1,R0 ;compare p and 0
jumpeq Done[R0] ; p == 0 goto Done
load R2, 0[R1] ; R2 := *p.value
store R2, X[R0] ; x = *p.value
Add R5, R5, R2
load R2, 1[R1] ; R2 := *p.next
jump Loop[R0] ; goto Loop
Done
Trap R0,R0,R0
Get value in node that p points at: x := *p.value
load R1,p[R0] ;R1 := p
load R2,0[R1] ; R2 := *p.value
store R2,x[R0] ; x := *p.value
Get pointer to next node in a list: q := *p.next
load R1,p[R0] ; R1 := p
load R2,1[R1] ; R2 := *p.next
store R2,y[R0] ; y := *p.next