Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm...

88
mith College Computer Science Dominique Thiébaut [email protected] CSC231 Week 11— Introduction to C Fall 2019

Transcript of Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm...

Page 1: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

mith College

Computer Science

Dominique Thiébaut [email protected]

CSC231Week 11— Introduction to C

Fall 2019

Page 2: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

https://kristv.com/sponsored/bay-area-bicycles/2019/02/25/from-training-wheels-to-two-wheels-tips-for-helping-kids-learn-to-ride/

Page 3: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

hw9a.asm

test0.asm

231Lib.asm

hw9a.o

test0.o

231Lib.o

nasm

nasm

nasm

test0

ld

Page 4: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Outline

• Recursion: Towers of Hanoi

• C

Page 5: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

D. Thiebaut, Computer Science, Smith College

Towers of Hanoi…in Assembly

• In Python first

• In Assembly next

https://media-cdn.tripadvisor.com/media/photo-s/0f/00/ee/18/ulun-danu-bratan-temple.jpg

Page 6: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

D. Thiebaut, Computer Science, Smith College

https://youtu.be/2SUvWfNJSsM

What's the relationship

between Towers of Hanoi

and Serpinski?

Watch on

your own!

Page 7: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

D. Thiebaut, Computer Science, Smith College

A B C

Page 8: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

D. Thiebaut, Computer Science, Smith College

Write it in Python!

getcopy hanoi0.py

Page 9: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

D. Thiebaut, Computer Science, Smith College

moveDisk( 5, Source, Dest, Extra )

moveDisk( 4, Source, Extra, Dest )

moveDisk( 1, Source, Dest, Extra )

moveDisk( 4, Extra, Dest, Source )

Page 10: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

D. Thiebaut, Computer Science, Smith College

moveDisk( 5, Source, Dest, Extra )

moveDisk( 4, Source, Extra, Dest )

moveDisk( 1, Source, Dest, Extra )

moveDisk( 4, Extra, Dest, Source )

Page 11: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

D. Thiebaut, Computer Science, Smith College

moveDisk( 5, Source, Dest, Extra )

moveDisk( 4, Source, Extra, Dest )

moveDisk( 1, Source, Dest, Extra )

moveDisk( 4, Extra, Dest, Source )

Page 12: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

D. Thiebaut, Computer Science, Smith College

getcopy hanoi.asm

Page 13: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

D. Thiebaut, Computer Science, Smith College

Page 14: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

C for Assembly

Language Programmers

Computer Science Dominique Thiebaut

Page 15: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

• Dennis Ritchie

• 1969 to 1973

• AT&T Bell Labs

• Close to Assembly

• Unix

• Standard

• Many languages based on C. (C++, Obj. C, C#)

• Many influenced by C (Java, Python, Perl)

Computer Science Dominique Thiebaut

Page 16: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

• Dennis Ritchie

• 1969 to 1973

• AT&T Bell Labs

• Close to Assembly

• Unix

• Standard

• Many languages based on C. (C++, Obj. C, C#)

• Many influenced by C (Java, Python, Perl)

Computer Science Dominique Thiebaut

Page 17: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Missing from C…

• Exceptions

• Garbage collection

• OOP

• Polymorphism

• But…

Page 18: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

• Exceptions

• Garbage collection

• OOP

• Polymorphism

• But… it is usually faster!

Missing from C…

Page 19: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Example: N-Queens Problem

http://www.science.smith.edu/dftwiki/index.php/CSC231:_N-Queens_Problem:_interpreted_vs_compiled

Page 20: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Example: N-Queens Problem

http://www.science.smith.edu/dftwiki/index.php/CSC231:_N-Queens_Problem:_interpreted_vs_compiled

Language Execution Time

Python 48 secC 1.4 secC with -O3 optimization      0.4 sec

Page 21: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Good Reference

• Essential C, by Nick Parlante, Stanford U. http://cslibrary.stanford.edu/101/EssentialC.pdf

Computer Science Dominique Thiebaut

Page 22: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

JAVA

C

Page 23: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

JAVA

C

POINTERS

OOP

(simplification)

Page 24: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Hello World!

#include <stdio.h>

int main() { printf("\nHello World\n"); return 0;}

Computer Science Dominique Thiebaut

Page 25: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Hello World!• Library

• Strings

• Block-structured language

• main() #include <stdio.h>

int main() { printf("\nHello World\n"); return 0;}

Computer Science Dominique Thiebaut

Page 26: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Hello World!• Library

• Strings

• Block-structured language

• main() #include <stdio.h>

int main() { printf("\nHello World\n"); return 0;}

Computer Science Dominique Thiebaut

getcopy C/hello.c

Page 27: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Compiling on Marax

• gcc Gnu compiler

• man gcc for help

[~/handout]$ gcc hello.c[~/handout]$ ./a.out

Hello World

[~/handout]$ gcc -o hello hello.c[~/handout]$ ./hello

Hello World

Computer Science Dominique Thiebaut

Page 28: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Files

Computer Science Dominique Thiebaut

Page 29: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

• Write your own Hello World! program

• Make it print something like: ************ * C Rocks! * ************

Exercise

Computer Science Dominique Thiebaut

getcopy C/hello.c

[~/handout]$ gcc -o hello hello.c[~/handout]$ ./helloHello World!

Page 30: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

• http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html

Computer Science Dominique Thiebaut

Good Reference

on C Compiler

Page 31: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Printing

•printf( "string with %-operators", list of vars);

•%d int

•%f float

•%s string

Computer Science Dominique Thiebaut

printf( "%3d %1.3f %s\n", 2, 3.14159, "CSC231 Assembly" );

Page 32: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Variables

Computer Science Dominique Thiebaut

Page 33: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

• Simple types

• No string type!

• No booleans (only 0 for false and !0 for true)

• No classes, no objects, no OOP!

Variables

int -> integer variableshort -> short integerlong -> long integerfloat -> single precision real (floating point) variabledouble -> double precision real (floating point) variablechar -> character variable (single byte)

Computer Science Dominique Thiebaut

Page 34: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld
Page 35: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld
Page 36: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Comments

Computer Science Dominique Thiebaut

Page 37: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

We stopped hereLast Time

We stopped hereLast Time

Page 38: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings(and String Functions)

Computer Science Dominique Thiebaut

Use "…" for strings

Use 'x' for characters

Page 39: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings

Computer Science Dominique Thiebaut

Page 40: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings

Computer Science Dominique Thiebaut

Page 41: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings

Computer Science Dominique Thiebaut

Page 42: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings

Computer Science Dominique Thiebaut

Page 43: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings

Computer Science Dominique Thiebaut

Page 44: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

[~/handout/C]$ gcc strings.c[~/handout/C]$ ./a.out

sentence = hello world![~/handout/C]

Strings

Computer Science Dominique Thiebaut

Page 45: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

A Few String Functionsstrcpy( dest, src )

copies the string pointed to by src to dest

strcat( dest, src )concatenate the string pointed to by src todest

strlen( src )returns the number of characters in thestring

more at https://www.tutorialspoint.com/c_standard_library/string_h.htm

Page 46: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

A Few String Functionsstrstr( haystack, needle )

returns a pointer to the needle (string) in the stack (string), or NULL if not found.

strchr( haystack, char-needle )returns a pointer to the needle (char) in the stack (string), or NULL if not found.

more at https://www.tutorialspoint.com/c_standard_library/string_h.htm

Page 47: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h' 'e' 'l' 'l' 'o' '\0'msg

Page 48: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h' 'e' 'l' 'l' 'o' \0msg

msg2 'h' 'e' 'l' 'l' 'o' ' ' 't' 'h' 'e' 'r' 'e' '\0'

Page 49: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h' 'e' 'l' 'l' 'o' \0msg

msg2 'h' 'e' 'l' 'l' 'o' ' ' 't' 'h' 'e' 'r' 'e' '\0'

msg3 'h' 'e' 'l' 'l' 'o' '\0' 't' 'h' 'e' 'r' 'e' '\0'

Page 50: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h' 'e' 'l' 'l' 'o' '\0'msg

msg2 'h' 'e' 'l' 'l' 'o' ' ' 't' 'h' 'e' 'r' 'e' '\0'

msg3 'h' 'e' 'l' 'l' 'o' '\0' 't' 'h' 'e' 'r' 'e' '\0'

msg4 '\0' 'e' 'l' 'l' 'o' '\0' 't' 'h' 'e' 'r' 'e' '\0'

Page 51: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Strings end with ‘\0’

Computer Science Dominique Thiebaut

Page 52: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

~/handout/C]$ ./a.outsentence = Hello world!sentence = Hello[~/handout/C]$

Strings end with ‘\0’

Computer Science Dominique Thiebaut

Page 53: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

~/handout/C]$ ./a.outsentence = Hello world!sentence = Hello[~/handout/C]$

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h'

'e'

'l'

'l'

'o'

'\0'

Strings

are Mutable

Page 54: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

• make the program compute your email account as the first letter of your first name and the first 8 letters of your last name.

Exercise

Computer Science Dominique Thiebaut

getcopy C/exercise1.c

Page 55: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

For-Loops

Computer Science Dominique Thiebaut

Page 56: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

For-Loops

Computer Science Dominique Thiebaut

Page 57: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

While-Loops

Computer Science Dominique Thiebaut

Page 58: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Infinite Loops

Computer Science Dominique Thiebaut

Page 59: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

• Write a program that displays the first 10 fibonacci terms. Use a loop!

• You may use this code to get started. You can start printing 1, 2, 3 or 1, 1, 2, 3… Both solutions are fine. int fibn=1, fibn1=1, fibn2=0; fibn = fibn1 + fibn2; … printf( "%d\n", fibn );

Exercise, Part 1

Computer Science Dominique Thiebaut

Page 60: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

• Take the solution for the previous exercise (getcopy C/fibonacci0.c) and replace the for-loop with a while loop that prints all the terms that less than 1000.

Computer Science Dominique Thiebaut

Exercise, Part 2

Page 61: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Symbolic Constants

Computer Science Dominique Thiebaut

Page 62: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Symbolic Constants

Computer Science Dominique Thiebaut

Page 63: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Symbolic Constants

Computer Science Dominique Thiebaut

After

preproce

ssing

Page 64: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Conditionals

Computer Science Dominique Thiebaut

Page 65: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Conditionals

Computer Science Dominique Thiebaut

&& and

|| or

! not

Page 66: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Conditionals (cont’d)

Computer Science Dominique Thiebaut

Page 67: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Computer Science Dominique Thiebaut

ints or chars, something countable

Conditionals (cont’d)

Page 68: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Pointers

Computer Science Dominique Thiebaut

Page 69: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Concept

Computer Science Dominique Thiebaut

x6.5

0FFF1F0A

px

RAM

Page 70: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Concept

Computer Science Dominique Thiebaut

x6.5

0FFF1F0A

px

RAM

Page 71: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Example: Initialize an Array

Computer Science Dominique Thiebaut

Using

indexing

3 4 1 9 3 4 6 6 1 0

0 1 2 3 4 5 6 7 8 9

A

Page 72: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Example: Initialize an Array

Computer Science Dominique Thiebaut

Using

indexing

Page 73: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Example: Initialize an Array

Computer Science Dominique Thiebaut

3 4 1 9 3 4 6 6 1 0

0 1 2 3 4 5 6 7 8 9

A

Using

pointers

Page 74: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Computer Science Dominique Thiebaut

Using

pointers

Example: Initialize an Array

Page 75: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

./a.outp=0x7fff88d54560 A[0] = 0.00 *p = 0.00p=0x7fff88d54564 A[1] = 1.00 *p = 1.00p=0x7fff88d54568 A[2] = 2.00 *p = 2.00p=0x7fff88d5456c A[3] = 3.00 *p = 3.00p=0x7fff88d54570 A[4] = 4.00 *p = 4.00p=0x7fff88d54574 A[5] = 5.00 *p = 5.00p=0x7fff88d54578 A[6] = 6.00 *p = 6.00p=0x7fff88d5457c A[7] = 7.00 *p = 7.00p=0x7fff88d54580 A[8] = 8.00 *p = 8.00p=0x7fff88d54584 A[9] = 9.00 *p = 9.00

Computer Science Dominique Thiebaut

Page 76: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Arrays

Computer Science Dominique Thiebaut

v[0]

6.5

0FFF1F00

pv

pv+1

pv+2

pv+3

v[1]

v[2]

v[3]

0FFF1F04

0FFF1F08

0FFF1F0C

0FFF1F10

Page 77: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Arrays

• The name of an array is a pointer to the first cell of the array.

• name is the same as &(name[0])

Computer Science Dominique Thiebaut

Page 78: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

* and &• * has two meanings, depending on

context

• “Pointer to”

• “Contents of”

• & means “the address of”

Computer Science Dominique Thiebaut

Page 79: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

* and &

Computer Science Dominique Thiebaut

Page 80: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Computer Science Dominique Thiebaut

Exercise• Write a C program that copies Array A into Array B using indexing first, and then using pointers.

getcopy C/copyArrays.c

Page 81: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Exercise• Write a C program that finds the largest integer in Array A, using pointers.

Computer Science Dominique Thiebaut

Page 82: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Functions

Computer Science Dominique Thiebaut

Page 83: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Functions

• Functions are normally declared before they are used

• Functions can return values of simple types (int, char, floats), and even pointers.

• Functions get parameters of simple types, and pointers.

• Passing by value is automatic. Passing by reference requires passing a pointer.

Computer Science Dominique Thiebaut

Page 84: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

z = 30z = 11sum( 11, 22) = 33

Computer Science Dominique Thiebaut

Example 1

Page 85: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

z = 30x = 11

Example 2 (Incomplete code… Add missing elements!)

Computer Science Dominique Thiebaut

Pass

by Reference!

Page 86: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Exercise

Complete the code

shown here

Computer Science Dominique Thiebaut

getcopy C/decrementArray.c

Page 87: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Exercise

Computer Science Dominique Thiebaut

• Write a C program that uses functions to find the largest integer in A. The result is passed back using a return statement.

Page 88: Week11 - Clark Science Center€¦ · hw9a.asm test0.asm 231Lib.asm hw9a.o test0.o 231Lib.o nasm nasm nasm test0 ld

Exercise

• Write another program that does the same thing but the max is passed back via a parameter passed by reference.

Computer Science Dominique Thiebaut