Download presentation

Presentation is loading. Please wait.

Published byMelanie Slaughter Modified over 2 years ago

1
Lecture 20: 11/12/2002CS170 Fall 20021 CS170 Computer Organization and Architecture I Ayman Abdel-Hamid Department of Computer Science Old Dominion University Lecture 20: 11/12/2002

2
CS170 Fall 20022 Outline A more complex exampleProcedure sort (section 3.10) Arrays versus pointersSection 3.11

3
Lecture 20: 11/12/2002CS170 Fall 20023 sort procedure 1/4 void sort (int v[], int n) { int i, j; for (i=0; i < n; i = i+1) for (j = i-1 ; j >= 0 && v[j] > v[j+1] ; j = j –1) swap (v, j); } What is the generated MIPS assembly code? v, n assigned to $a0, $a1 i, j assigned to registers $s0, $s1 Outer for loop move $s0, $zero# i 0 for1tst:slt $t0,$s0,$a1#$t0 0 if $s0 >= $a1 beq $t0, $zero, exit1# if i >= n go to exit1 …. …..(body of loop) addi $s0,$s0,1# i = i +1 j for1tst# jump to test Exit1:

4
Lecture 20: 11/12/2002CS170 Fall 20024 sort procedure 2/4 Inner for loop addi $s1, $s0,-1# j = i-1 for2tst:slti $t0,$s1,0# $t0 1 if $s1 <0 bne $t0,$zero,exit2# if j <0 go to exit 2 add $t1,$s1,$s1# $t1 j *2 add $t1,$t1,$t1# $t1 j *4 add $t2,$a0,$t1# $t2 v + (j*4) lw $t3, 0($t2)#$t3 v[j] lw $t4,4($t2)#$t4 v[j+1] slt $t0,$t4,$t3# $t0 0 if $t4 >= $t3 beq $t0, $zero,exit2 # if $t4 >= $t3 go to exit2 …. addi $s1.$s1,-1# j = j-1 j for2tst# jump to test Exit2: void sort (int v[], int n) { …… for (j = i-1 ; j >= 0 && v[j] > v[j+1] ; j = j –1) swap (v, j); } What is the generated MIPS assembly code? v, n assigned to $a0, $a1 i, j assigned to registers $s0, $s1

5
Lecture 20: 11/12/2002CS170 Fall 20025 sort procedure 3/4 Procedure call and parameter passing ….. move $s2,$a0# copy $a0 into $s2 move $s3,$a1# copy $a1 into $s3 ….. move $a0, $s2 #first swap parameter is v move $a1,$s1 # second swap parameter is j jal swap Preserving registers in sort ($ra,$s0-$s3) addi $sp,$sp,-20# make room for 5 regs sw $ra, 16($sp)# save $ra on stack sw $s3,12($sp)# save $s3 on stack.. … void sort (int v[], int n) { …… for (j = i-1 ; j >= 0 && v[j] > v[j+1] ; j = j –1) swap (v, j); } What is the generated MIPS assembly code? v, n assigned to $a0, $a1 i, j assigned to registers $s0, $s1 swap needs parameters in $a0, $a1, then sort must save these registers before calling swap. An efficient solution stores $a0, $a1 in other registers instead of saving on stack

6
Lecture 20: 11/12/2002CS170 Fall 20026 sort procedure 4/4

7
Lecture 20: 11/12/2002CS170 Fall 20027 Arrays versus Pointers 1/2 void clear1 (int array[], int size) { int i; for ( i = 0; i < size ; i = i+1) array[i] = 0; } What is the generated MIPS assembly code? void clear2 (int *array, int size) { int *p; for ( p = &array[0]; p < &array[size] ; p =p+1) *p = 0; } What is the generated MIPS assembly code? move $t0, $zero #i = 0 Loop1:add $t1, $t0,$t0 #$t1 = i*2 add $t1,$t1,$t1 #$t1= i *4 add $t2,$a0,$t1 # $t2 = array + 4 *I sw $zero,0($t2) #array[i] = 0 addi $t0,$t0,1 # i = i+1 slt $t3,$t0,$a1 # $t3 = 1 if i < size bne $t3,$zero,loop1 # go to loop1 if more iterations #This code works as long as size is greater than zero move $t0, $a0 #p = address of array[0] Loop2:sw $zero 0($t0) # Memory[p] = 0 addi $t0, $t0,4 # p = p +4 add $t1,$a1,$a1 # $t1 size * 2 add $t1,$t1,$t1 # $t1 size*4 add $t2,$a0,$t1 #$t2 address of array[size] slt $t3,$t0,$t2 #$t3 = 1 if (p < &array[size]) bne $t3,$zero,loop2 # go to loop2 if more iterations #This code works as long as size is greater than zero

8
Lecture 20: 11/12/2002CS170 Fall 20028 Arrays versus Pointers 2/2 void clear1 (int array[], int size) { int i; for ( i = 0; i < size ; i = i+1) array[i] = 0; } What is the generated MIPS assembly code? void clear2 (int *array, int size) { int *p; for ( p = &array[0]; p < &array[size] ; p =p+1) *p = 0; } What is the generated MIPS assembly code? move $t0, $zero #i = 0 Loop1:add $t1, $t0,$t0 #$t1 = i*2 add $t1,$t1,$t1 #$t1= i *4 add $t2,$a0,$t1 # $t2 = array + 4 *I sw $zero,0($t2) #array[i] = 0 addi $t0,$t0,1 # i = i+1 slt $t3,$t0,$a1 # $t3 = 1 if i < size bne $t3,$zero,loop1 # go to loop1 if more iterations #This code works as long as size is greater than zero A more optimized solution move $t0, $a0 #p = address of array[0] add $t1,$a1,$a1 # $t1 size * 2 add $t1,$t1,$t1 # $t1 size*4 add $t2,$a0,$t1 #$t2 address of array[size] Loop2:sw $zero 0($t0) # Memory[p] = 0 addi $t0, $t0,4 # p = p +4 slt $t3,$t0,$t2 #$t3 = 1 if (p < &array[size]) bne $t3,$zero,loop2 # go to loop2 if more iterations #This code works as long as size is greater than zero

Similar presentations

OK

1 Nested Procedures Procedures that don't call others are called leaf procedures, procedures that call others are called nested procedures. Problems may.

1 Nested Procedures Procedures that don't call others are called leaf procedures, procedures that call others are called nested procedures. Problems may.

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google

Ppt on food web and food chain Ppt on colour tv transmitter and receiver Ppt on brand marketing Ppt on security guard services Ppt on cse related topics about psychology A ppt on android Ppt on high sea sales meaning Ppt on save water free download Ppt on transportation in plants for class 7 Ppt on 2 stroke ic engine