Presentation is loading. Please wait.

Presentation is loading. Please wait.

What's wrong with this procedure?

Similar presentations


Presentation on theme: "What's wrong with this procedure?"— Presentation transcript:

1

2 What's wrong with this procedure?
f: sub $s0,$a0,$a3 sll $v0,$s0,0x1 add $v0,$a2,$v0 sub $v0,$v0,$a1 jr $ra There is no $a2 or $a3 sll doesn't take an immediate constant $v0 isn't preserved across the call $s0 isn't preserved across the call The last instruction should be jal [PH Exercise , p. 202]

3 int leaf_example (int g, int h, int i, int j) {
int f; f = (g+h) - (i+j); return f; } [PH, pp. 114–115] leaf_example: addi $sp,$sp,-12 # adjust stack for 3 items sw $t1, 8($sp) # save register $t1 sw $t0, 4($sp) # save register $t0 sw $s0, 0($sp) # save register $s0 add $t0,$a0,$a1 # t0 = g + h add $t1,$a2,$a3 # t1 = i + j sub $s0,$t0,$t1 # s0 = t0-t1 == (g+h)-(i+j) add $v0,$s0,$zero # return f (v0 = s0 + 0) lw $s0, 0($sp) # restore $s0 for caller lw $t0, 4($sp) # restore $t0 for caller lw $t1, 8($sp) # restore $t1 for caller addi $sp,$sp,12 # restore stack jr $ra # jump back to caller

4 Stack Pointer $sp [PH Fig. 2.10, p. 116]

5 int fact (int n) { if (n < 1) return 1; else return n * fact(n-1); } [PH, pp. 114–115] fact: addi $sp,$sp,-8 # adjust stack: 2 items sw $ra, 4($sp) # save return address sw $a0, 0($sp) # save argument n slti $t0,$a0,1 # test n < 1 beq $t0,$zero,L1 # if n>=1, go to L1 addi $v0,$zero,1 # return 1 addi $sp,$sp,8 # pop 2 items off stack jr $ra # jump to caller L1: addi $a0,$a0,-1 # n>=1: argument is n-1 jal fact # call fact(n-1) lw $a0, 0($sp) # returned: restore n lw $ra, 4($sp) # restore orig ret addr mul $v0,$a0,$v0 # return n*fact(n-1)

6 Frame Pointer $fp [PH Fig. 2.12, p. 119]

7 Preserved Across Procedure Calls
[PH Fig. 2.11, p. 118]

8 Memory Allocation [PH Fig. 2.13, p. 120]

9 int sum(int n, int acc) { if (n>0) return sum(n-1, acc+n); else return acc; }
sum: slti $a0,1 # test n<=0 beq $a0,$zero,done # if n<0: go to done add $a1,$a1,$a0 # acc = acc + n addi $a0,$a0,-1 # n = n – 1 j sum # go to sum done: add $v0,$a1,$zero # return acc jr $ra # go to caller [PH, p. 120–121]

10 Register Conventions [PH Fig. 2.14, p. 121]

11 Exercises 2.19.1(a) 2.19.2(a) 2.20.1(a)


Download ppt "What's wrong with this procedure?"

Similar presentations


Ads by Google