630 likes | 1.04k Views
Software Outline. Programming Languages Natural Languages vs Programming Languages Programming Language Hierarchy High Level Languages Assembly Languages Machine Languages Converting Between Languages Compiler Interpreter Assembler Our Old Friend hello_world.c Compiler Details
E N D
Software Outline • Programming Languages • Natural Languages vs Programming Languages • Programming Language Hierarchy • High Level Languages • Assembly Languages • Machine Languages • Converting Between Languages • Compiler • Interpreter • Assembler • Our Old Friend hello_world.c • Compiler Details • Compiler Details (cont’d) • Elements of a Compiler #1 • Elements of a Compiler #2 • Phases of Compiling • Compiling a C Statement • Assembly Code for hello_world.c #1 • Assembly Code for hello_world.c #2 • Machine Code for hello_world.c • How to Program in Machine Language Directly • Why Not Do Everything in Machine Language? • Why Not Do Everything in Assembly Language? • The Programming Process • What is an Algorithm? • Algorithms • Algorithm Example: Eating a Bowl of Corn Flakes • Top-Down Design • Eating Cornflakes: Top Level • Software Outline • What is Software? • What is a Program? • What are Instructions? • What is a Programming Language? • What is Source Code? What is a Source File? • What is an Operating System? • Operating System Examples • A Simple C Program • Anatomy of a Simple C Program • Block Delimiters • What Is a Comment? #1 • What Is a Comment? #2 • Are Comments Necessary? • hello_world.c with Comments • hello_world.c without Comments • Flowchart for hello_world.c • A Less Simple C Program #1 • A Less Simple C Program #2 • A Less Simple C Program #3 • A Less Simple C Program: Compile & Run • Flowchart for my_add.c • Languages • What Are the Ingredients of a Language? • Kinds of Languages • Natural Languages #1 • Natural Languages #2 • Natural Languages #3 • Natural Languages #4 Software Lesson CS1313 Spring 2006
What is Software? Software, for our purposes, is just a word meaning “programs.” Software Lesson CS1313 Spring 2006
What is a Program? A program is a collection of data – on RAM, disk, etc – and a sequence of actions on those data. The actions in a program are known as instructions. Software Lesson CS1313 Spring 2006
What are Data? In computing, data are values stored in storage locations: RAM, disk, etc. Software Lesson CS1313 Spring 2006
What are Instructions? The actions in a program are known as instructions. Examples: • Arithmetic/Logical calculation: e.g., add, subtract, multiply, divide, square root, cosine, etc. • Memory operations: load from or store into RAM • I/O: read from or write to secondary storage • Branch: jump to an instruction that is out of sequence • Repetition • Allocation of resources … and many more. Software Lesson CS1313 Spring 2006
What is a Programming Language? A programming languageis a well-defined set of rules for specifying a program’s collection of data and sequence of instructions. Examples: C, C++, Fortran 90, Java, Basic, HTML, Perl, Haskell, Prolog, Pascal, Unix shell, SAS, Pentium4 assembly language, etc. Software Lesson CS1313 Spring 2006
What is Source Code? What is a Source File? Source codeis a sequence of instructions, written in a human-readableprogramming language, that constitutes a program, or a piece of a program. An example is shown on page 10. A source file is a file of source code. Software Lesson CS1313 Spring 2006
What is an Operating System? An operating systemis a program that manages interactions between: • users and hardware; • users and software; • hardware and software; ... and so much more. Software Lesson CS1313 Spring 2006
Operating System Examples • MS Windows/MS-DOS • MacOS • PalmOS • Unix • Linux (portable) • FreeBSD (portable, underlies MacOS X) • Solaris (Sun Microsystems) • AIX (IBM) • IRIX (SGI) • Tru64 (Hewlett-Packard) • HP-UX (Hewlett-Packard) • Unicos (Cray) Software Lesson CS1313 Spring 2006
A Simple C Program /* ************************************************* *** Program: hello_world *** *** Author: Henry Neeman (hneeman@ou.edu) *** *** Course: CS 1313 010 Spring 2006 *** *** Lab: Sec 012 Fridays 10:30am *** *** Description: Prints the sentence *** *** "Hello, world!" to standard output. *** ************************************************* */ #include <stdio.h> int main () { /* main */ /* ******************************** *** Execution Section (body) *** ******************************** * * Print the sentence to standard output * (i.e., to the terminal screen). */ printf("Hello, world!\n"); } /* main */ Software Lesson CS1313 Spring 2006
Anatomy of a Simple C Program /* ************************************************* *** Program: hello_world *** *** Author: Henry Neeman (hneeman@ou.edu) *** *** Course: CS 1313 010 Spring 2006 *** *** Lab: Sec 012 Fridays 10:30am *** *** Description: Prints the sentence *** *** "Hello, world!" to standard output. *** ************************************************* */ #include <stdio.h> int main () { /* main */ /* ******************************** *** Execution Section (body) *** ******************************** * * Print the sentence to standard output * (i.e., to the terminal screen). */ printf("Hello, world!\n"); } /* main */ Comment block Preprocessor directive Main function header Block open Execution section (also known as the program body) Block close Software Lesson CS1313 Spring 2006
Block Delimiters The open curly brace, also known as the left brace, { acts as the start of a block and is known as the block open. The close curly brace, also known as the right brace, } acts as the end of a block and is known as the block close. The block open and block close are said to delimit the block: they indicate where the block begins and where the block ends. Delimit: indicate where something begins and ends. Software Lesson CS1313 Spring 2006
What Is a Comment? #1 A commentis a piece of text in a source file that: • tells human beings (e.g., programmers) something useful about the program, but • is ignored by the compiler, so it has absolutely no affect on how the program runs. In C, the start of a comment is indicated by /* and the end of a comment is indicated by */ All text appearing between these comment delimitersare part of the comment, and therefore are ignored by the compiler. Software Lesson CS1313 Spring 2006
What Is a Comment? #2 A commentis a piece of text in a source file that: • tells human beings (e.g., programmers) something useful about the program, but • is ignored by the compiler, so it has absolutely no affect on how the program runs. In C, the start of a comment is indicated by /* and the end of a comment is indicated by */ A comment can use multiple lines of text. The delimiters do not have to be on the same line. Software Lesson CS1313 Spring 2006
Are Comments Necessary? Comments are ignored by the compiler, so strictly speaking they aren’t needed to compile and run. But, if you don’t put them into one of your CS1313 programming projects, YOU MAY LOSE A FULL LETTER GRADE OR MOREon that project. Why? Comments tell human beings useful things about your program. They help programmers – including you, a month later when you’ve forgotten everything about your program – to understand your program. They also tell graders that you know what the heck you’re doing. Software Lesson CS1313 Spring 2006
hello_world.c with Comments /* ************************************************* *** Program: hello_world *** *** Author: Henry Neeman (hneeman@ou.edu) *** *** Course: CS 1313 010 Sprint 2006 *** *** Lab: Sec 012 Fridays 10:30am *** *** Description: Prints the sentence *** *** "Hello, world!" to standard output. *** ************************************************* */ #include <stdio.h> int main () { /* main */ /* ******************************** *** Execution Section (body) *** ******************************** * * Print the sentence to standard output * (i.e., to the terminal screen). */ printf("Hello, world!\n"); } /* main */ Software Lesson CS1313 Spring 2006
hello_world.c without Comments #include <stdio.h> int main () { printf("Hello, world!\n"); } Software Lesson CS1313 Spring 2006
Start Output “Hello, world!” End Flowchart for hello_world.c An ovaldenotes either the start or the end of the program, or a halt operation within the program (which we’ll learn about later). A parallelogramdenotes either an input operation or an output operation. An arrowdenotes the flow of the program. int main () { printf("Hello, world!\n"); } References: http://www.wiley.co.uk/college/busin/icmis/oakman/outline/chap05/slides/symbols.htm http://www.ncits.org/tc home/k5htm/f2.htm#flowchart symbol Software Lesson CS1313 Spring 2006
Outputting, Compiling and Running a C Program % cat hello_world.c /* ************************************************* *** Program: hello_world *** *** Author: Henry Neeman (hneeman@ou.edu) *** *** Course: CS 1313 010 Fall 2005 *** *** Lab: Sec 011 Fridays 9:30am *** *** Description: Prints the sentence *** *** "Hello, world!" to standard output. *** ************************************************* */ #include <stdio.h> int main () { /* main */ /* ******************************** *** Execution Section (body) *** ******************************** * * Print the sentence to standard output * (i.e., to the terminal screen). */ printf("Hello, world!\n"); } /* main */ % gcc -o hello_world hello_world.c % hello_world Hello, world! Software Lesson CS1313 Spring 2006
Anatomy of Outputting, Compiling and Running Unix command to output to the screen % cat hello_world.c /* ************************************************* *** Program: hello_world *** *** Author: Henry Neeman (hneeman@ou.edu) *** *** Course: CS 1313 010 Fall 2005 *** *** Lab: Sec 011 Fridays 9:30am *** *** Description: Prints the sentence *** *** "Hello, world!" to standard output. *** ************************************************* */ #include <stdio.h> int main () { /* main */ /* ******************************** *** Execution Section (body) *** ******************************** * * Print the sentence to standard output * (i.e., to the terminal screen). */ printf("Hello, world!\n"); } /* main */ % gcc -o hello_world hello_world.c % hello_world Hello, world! Unix command to compile Unix command to run Program output Software Lesson CS1313 Spring 2006
A Less Simple C Program #1 /* ************************************************ *** Program: my_add *** *** Author: Henry Neeman (hneeman@ou.edu) *** *** Course: CS 1313 010 Fall 2005 *** *** Lab: Sec 011 Fridays 9:30am *** *** Description: Input two integers, compute *** *** their sum and output the result. *** ************************************************ */ #include <stdio.h> int main () { /* main */ /* *************************** *** Declaration Section *** *************************** * ***************************** * Named Constant Subsection * ***************************** */ const int program_success_code = 0; /* ***************************** * Local Variable Subsection * ***************************** * * addend: the addend value that the user inputs. * augend: the augend value that the user inputs. * sum: the sum of the addend and the augend, * which is output. */ int addend, augend, sum; Continued on the next slide. Software Lesson CS1313 Spring 2006
A Less Simple C Program #2 /* ************************* *** Execution Section *** ************************* * *********************** * Greeting Subsection * *********************** * * Tell the user what the program does. */ printf("I’ll add a pair of integers.\n"); /* ******************** * Input subsection * ******************** * * Prompt the user to input the addend & augend. */ printf("What two integers do you want to add?\n"); /* * Input the integers to be added. */ scanf("%d %d", &addend, &augend); Continued on the next slide. Software Lesson CS1313 Spring 2006
A Less Simple C Program #3 /* ************************** * Calculation Subsection * ************************** * * Calculate the sum. */ sum = addend + augend; /* ********************* * Output Subsection * ********************* * * Output the sum. */ printf("The sum of %d and %d is %d.\n", addend, augend, sum); return program_success_code; } /* main */ Software Lesson CS1313 Spring 2006
A Less Simple C Program: Compile & Run % gcc -o my_add my_add.c % my_add I’ll add a pair of integers. What two integers do you want to add? 5 7 The sum of 5 and 7 is 12. % my_add I’ll add a pair of integers. What two integers do you want to add? 1593 09832 The sum of 1593 and 9832 is 11425. Software Lesson CS1313 Spring 2006
Flowchart for my_add.c A rectangledenotes an operation other than I/O or branching (e.g., calculation). Software Lesson CS1313 Spring 2006
Languages • What is a language? • Kinds of languages • Natural languages • Programming languages (also known as Formal languages) • Converting between programming languages • Compilers • Interpreters • Assemblers Software Lesson CS1313 Spring 2006
What Are the Ingredients of a Language? • Symbols: a set of wordsand punctuation(in computing, words and punctuation are together known as tokens) • Grammar(also known as syntax): a set of rules for putting tokens together to get valid statements • Semantics: a set of rules for interpreting the meaningof a valid statement Software Lesson CS1313 Spring 2006
Kinds of Languages • Natural languages: used in human communication • Programming languages (also known as formal languages): used by computers (among others) Software Lesson CS1313 Spring 2006
Natural Languages #1 • Examples: English, Chinese, Swahili, Navajo, Quechua, Maori • Typically can be described by formal rules (grammar), but often are not rigidly governed by these rules in everyday use: “Any noun can be verbed.” “I might could get me one o’ them there computers.” Software Lesson CS1313 Spring 2006
Natural Languages #2 • Can mix words from different languages — and even syntax(elements of grammar) from different languages — in a single sentence: “Hey, amigo, is it all right by you if I kibbitz your parcheesi game while we watch your anime?” Software Lesson CS1313 Spring 2006
Natural Languages #3 • Can be ambiguous: “When did he say she was going?” could be interpreted as: • State the time at which he said, “She was going.” • According to him, at what time was she going? Software Lesson CS1313 Spring 2006
Natural Languages #4 • Plenty of flexibility regarding “correctness;” e.g., “ain’t,” split infinitives, ending a sentence with a preposition “That is something up with which I will not put.” Software Lesson CS1313 Spring 2006
Programming Languages • Examples: C, Java, HTML, Haskell, Prolog, SAS • Also known as formal languages • Completely described and rigidly governed by formal rules • Cannot mix the words of multiple languages, or the syntax of multiple languages, in the same program • Cannot be ambiguous • Words and syntax must be EXACTLYcorrect in every way Software Lesson CS1313 Spring 2006
Natural Languages vs Programming Languages Software Lesson CS1313 Spring 2006
Programming Language Hierarchy • High Level Languages • Assembly Languages • Machine Languages Software Lesson CS1313 Spring 2006
High Level Languages • Human-readable • Most are standardized, so they can be used on just about any kind of computer. • Examples: C, Fortran 90, Java, HTML, Haskell, SAS • Typically they are designed for a particular kind of application; for example: • C for operating system design • Fortran 90 for scientific & engineering applications • Java for web applets and embedded systems • HTML for hypertext (webpages) • SAS for statistics But often, their uses in real life are broader their original purpose. Software Lesson CS1313 Spring 2006
Assembly Languages • Human-readable • Specific to a particular CPU family; for example: • Intel Pentium4/AMD Athlon XP (PC) • Motorola PowerPC G5 (Macintosh) • Intel Itanium2 (servers) • So, for example, a program in Pentium4 assembly language cannot be directly run on a G5 machine. • Set of simple commands; for example: • Load a value from a location in main memory • Add two numbers • Branch to an instruction out of sequence Software Lesson CS1313 Spring 2006
Machine Languages • Not human-readable, except with immense effort • Binary code that the CPU family understands directly • Binary representation of the CPU family’s assembly language Software Lesson CS1313 Spring 2006
Converting Between Languages Compilers, interpreters and assemblers are programs that convert programs that people can read into actions that computers can perform. Software Lesson CS1313 Spring 2006
Compiler • Converts a human-readable high level language source code of a program into a machine language executableprogram • Converts an entire source code all at once • Must be completed before executing the program • Examples: Fortran 90, C, C++, Pascal Software Lesson CS1313 Spring 2006
Interpreter • Converts a human-readable high level language source code into actions that are immediately performed • Converts and executes one statement at a time • Conversion and execution alternate • Examples: Perl, HTML, SAS, Mathematica, Unix “shell” (interactive system within Unix) Software Lesson CS1313 Spring 2006
Assembler • Converts a human-readable CPU-specific assembly codeinto CPU-specific machine language • Like a compiler, but for a low level assembly language instead of for a high level language Software Lesson CS1313 Spring 2006
Our Old Friend hello_world.c % cat hello_world.c /* ************************************************* *** Program: hello_world *** *** Author: Henry Neeman (hneeman@ou.edu) *** *** Course: CS 1313 010 Fall 2005 *** *** Lab: Sec 011 Fridays 9:30am *** *** Description: Prints the sentence *** *** "Hello, world!" to standard output. *** ************************************************* */ #include <stdio.h> int main () { /* main */ /* ******************************** *** Execution Section (body) *** ******************************** * * Print the sentence to standard output * (i.e., to the terminal screen). */ printf("Hello, world!\n"); } /* main */ % gcc -o hello_world hello_world.c % hello_world Hello, world! Software Lesson CS1313 Spring 2006
Compiler Details Software Lesson CS1313 Spring 2006
Compiler Details (cont’d) Software Lesson CS1313 Spring 2006
Elements of a Compiler #1 • Lexical Analyzer: identifies program’s “word” elements • Comments (ignored by compiler) • Keywords(e.g., int, while) • Constants(e.g., 5, 0.725, "Hello, world!") • User-defined Identifiers (e.g., addend) • Operators; for example: • Arithmetic: + - * / % • Relational: == != < <= > >= • Logical: && || ! Software Lesson CS1313 Spring 2006
Elements of a Compiler #2 • Parser: determines the program’s grammar • Semantic Analyzer: determines what the program does • Intermediate Code Generator: expresses, as an assembly-like program, what the program does • Optimizer: makes code more efficient (faster) • Assembly Code Generator: produces the final assembly code that represents what the program does Software Lesson CS1313 Spring 2006
Phases of Compiling • Compiler • Assembler: turns assembly code into machine code • Linker/loader: turns machine code into an executable file Both the assembler and the linker/loader are invoked automatically by the compiler, so you don’t have to worry about them. Software Lesson CS1313 Spring 2006
Compiling a C Statement Software Lesson CS1313 Spring 2006
On Pentium4 Using gcc pushl %ebp movl %esp, %ebp subl $8, %esp subl $12, %esp pushl $.LC0 call printf addl $16, %esp leave ret On IBM POWER4 Using gcc mflr 0 stw 31,-4(1) stw 0,8(1) stwu 1,-64(1) mr 31,1 lwz 3,LC..1(2) bl .printf nop lwz 1,0(1) lwz 0,8(1) mtlr 0 lwz 31,-4(1) blr Assembly Code for hello_world.c #1 Different opcodes! Software Lesson CS1313 Spring 2006