1 / 15

Introduction

CS 104: Applied C++. (Read Chap. 1). Introduction. What is Programming? For some given problem: design a solution for it -- identify, organize & store the problem's data -- develop algorithms (procedures) to process it; code this solution as a program; test the program;

rcarla
Download Presentation

Introduction

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS 104: Applied C++ (Read Chap. 1) Introduction What is Programming? For some given problem: • design a solution for it -- identify, organize & store the problem's data -- develop algorithms (procedures) to process it; • code this solution as a program; • test the program; • maintain the program (fix it, upgrade it, …). What is a program? • a collection of statements that • implement the design plan, and • are written in a programming language — a language that the computer can understand. OCD in C++ debug "real world" 1

  2. What kinds of statementsdo computers understand? RISCCISC • A computer only understands a language specially designed for it called machine language. • Machine-language statements are stored in a computer’s memory, which is a sequence of two-state devices (on-off switches). They are retrieved from memory and executed one at a time. • The "character set" for machine language: __ representing"off" __ representing"on" 0 1 2

  3. binary digits Example (hypothetical) • 0001000000000000000001000000001010010010000000000000010000000001001000110000000000000100000000100001000100000000000001000000001100010000000000110100010000000000001001000000000000000100000110010010001100000000000001000000001000010001000000001000010000000011000111000000000000010... Machine language programs thus consists of strings of bits ( ). 3

  4. first operand second operand opcode 000100000000000000010100000000000 001001 000000000000001000000000100100011000000 000000010000000010000100010000000000000 100000000110001000000000011010001000000 000000100100000000000000010000011001001 instruction #1 • instruction #1 000110000000000000100000000100001000100 000000100001000000001100011100000000000 0010... Bits are usually grouped into bytes (8 bits) and words (e.g., 32 or 64 bits). Each machine language instruction might be stored in one word. in memory location with this address e.g., "Store" 1 4

  5. instruction #1 #2 000100000000000000010100000000000001001 000000000000001000000000100100011000000 #3 000000010000000010000100010000000000000 #4 100000000110001000000000011010001000000 000000100100000000000000010000011001001 000110000000000000100000000100001000100 000000100001000000001100011100000000000 0010... So a sequence of machine language instructions might be stored in a sequence of consecutive words. 5

  6. C++ int main(){ int x, y; x = 1; y = x + 2; return 0; } A Real Machine-Language Example SPARC executable machine code 000001110111010100000101 000001000110000100000110 000000000000010000000010 000000000000010000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000010 000000000000000000000010 000000000000000000000000 000000000000000000000001 000000000000000000000001 000000000011010000110000 000000000000000000000000 000000000000000001100100 000000000000000000000000 000000010011000100100100 000000000000000000000000 000000000000000000000000 000000000000000001100100 000000000000000001000000 000000000000000000000101 000000000000000001010000 000000000000000000110011 000000000000000000110001 000000000000000000000000 000000000000000000000110 000000000000000000000000 000000000000000001100100 000000000000000000000001 000000000000000001100100 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000001001000000 000000000000000000000000 000000000000001001000000 000000000000000000000000 000000000000000000000101 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000011 000000000000000000000000 000000000000001100100100 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000100001 … this goes on for another 1600 lines... Intel Pentium executable machine code 000000100111000000010001 000001100100010101000110 000001100010010101010100 000000100001000000010001 000001100111000101010001 000001110001000101100100 000000100111000101010111 000000100001000101000011 000000000101000000010101 000001100001010101000111 000000110001000101000011 000001100001010100110111 000001100110010101010111 000001100100010101100000 000001100010010101010100 000000100111000101000100 000000000110010001110010 000001010111010000010010 000001010111010100110111 000001100111000101000111 000001010111010101100101 000001100111010101000011 000001110000000101010101 000001100110000101010001 000001100010000101000101 000001100001010100110111 000000000110010001110010 000000000100010000010010 000001100010000001010110 000001100011000101000101 000001010111010000010001 000001010111010100110111 000001100000010101010101 000001100111000101010001 000000000100010001110011 000001110001010001010110 000001100110000101000011 000000110001000000010001 000000000100010001110011 000001110010000001010110 000001110000000101110001 000000000100010101000101 000000110001000001100011 000000000100010001110011 000001100010010001010110 000001100010000101010110 000001100011000101000101 000000000101000000010101 000001110010000001010110 000001110100000101000101 000000000110010101100100 000000000100010000010010 … this goes on for another 74 lines... 6

  7. Early Computers • Required a programmer to write in machine language. • Very easy to make mistakes! • And they were hard to find! • Programs were not portable. They could only be run on one kind of machine! • Result: programming was very difficult and programs weren't widely used. 7

  8. Assembler An Early Innovation Devise a set of mnemonics (abbreviations), one for each machine language instruction; this was called an assembly language. Create a machine-language program called an assembler to input each assembly language instruction and translate it into machine language. LOAD x ADD 2 STORE y 1000000010101001 1100010000000010 1000000110111100 8

  9. Intel Pentium assembly language: _main: pushl %ebp movl %esp,%ebp subl $24,%esp call ___main movl $1,-4(%ebp) movl -4(%ebp),%eax addl $2,%eax movl %eax,-8(%ebp) xorl %eax,%eax jmp L2 .align 4 L2: movl %ebp,%esp popl %ebp ret SPARC assembly language: main: save %sp, -120, %sp mov 1, %o0 st %o0, [%fp-20] ld [%fp-20], %o0 add %o0, 2, %o1 st %o1, [%fp-24] mov 0, %i0 b .LL2 nop mov 0, %i0 b .LL2 nop .LL2: ret restore Sun Assembler Intel Assembler 000000100111000000010001 000001100100010101000110 000001100010010101010100 000000100001000000010001 000001100111000101010001 000001110001000101100100 000000100111000101010111 000000100001000101000011 000000000101000000010101 000001100001010101000111 000000110001000101000011 000001100001010100110111 000001100110010101010111 000001100100010101100000 000001100010010101010100 000000100111000101000100 000000000110010001110010 000001010111010000010010 000001010111010100110111 000001100111000101000111 000001010111010101100101 000001100111010101000011 000001110000000101010101 000001100110000101010001 000001100010000101000101 000001100001010100110111 000000000110010001110010 000000000100010000010010 000001100010000001010110 000001100011000101000101 000001010111010000010001 000001010111010100110111 000001100000010101010101 000001100111000101010001 000000000100010001110011 000001110001010001010110 000001100110000101000011 000000110001000000010001 000000000100010001110011 000001110010000001010110 000001110000000101110001 000000000100010101000101 000000110001000001100011 000000000100010001110011 000001100010010001010110 000001100010000101010110 000001100011000101000101 000000000101000000010101 000001110010000001010110 000001110100000101000101 000000000110010101100100 000000000100010000010010 000001110111010100000101 000001000110000100000110 000000000000010000000010 000000000000010000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000010 000000000000000000000010 000000000000000000000000 000000000000000000000001 000000000000000000000001 000000000011010000110000 000000000000000000000000 000000000000000001100100 000000000000000000000000 000000010011000100100100 000000000000000000000000 000000000000000000000000 000000000000000001100100 000000000000000001000000 000000000000000000000101 000000000000000001010000 000000000000000000110011 000000000000000000110001 000000000000000000000000 000000000000000000000110 000000000000000000000000 000000000000000001100100 000000000000000000000001 000000000000000001100100 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000001001000000 000000000000000000000000 000000000000001001000000 000000000000000000000000 000000000000000000000101 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000011 000000000000000000000000 000000000000001100100100 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000000000000000100001 int main(){ int x, y; x = 1; y = x + 2; return 0; } The Real Example 9

  10. Assembly Languages Allowed a programmer to use mnemonics, which were more natural than binary. • Much easier to read programs • And much easier to find and fix mistakes • Still not portable to different machines • Still quite difficult to write, read, and debug programs 10

  11. Next Major Advance: High Level Languages & Compilers To improve on assembly language: Devise a set of statements called a high-level language that are closer to human language and methods of writing expressions and a program called a compiler to translate them into machine language. 1950sFORTRANCOBOL LISP Why not just use human language? It’s too complex and ambiguous; e.g., “Time flies like an arrow” 11

  12. Compiler Assembler Compilers vs. Assemblers An assembler translates one assembly-language statement into one machine-language statement. A compiler translates one high-level statement into multiple machine-language statements, so it is much more difficult to write a correct compiler than an assembler. 1000000000110101 1100010000110110 1000000101000001 1000000000110100 1100011001000001 1000000100110111 z = a * (b + c); LOAD bADD cSTORE temp1LOAD aMULT temp1STORE z 12

  13. Advantages of High-Level Languages With programming in high-level languages (e.g., C++): • Programs are much easier to read. • Mistakes are much easier to find and fix. • Programs are (or can be) portable from one machine to another (provided they conform to the language standard). Just need a compiler for that language written in the machine language of that machine. • Not so simple that just anyone can use them (otherwise this course wouldn't exist) 13

  14. Objectives in Programming Grading criteria A program to solve a problem should be: • correct (it actually solves the problem) • readable (understandable by another person) • user-friendly (designed in a way that is easy for its user to use). • efficient (doesn’t waste time or space) Later 14

  15. Fredrick P. Brooks, Jr. (1931- ) The woes of programming: Products become obsolete tooquickly. The joys of programming: The “mindless” details can be excessively tedious. We enjoy designing things because we are created in the image of God. The computer is a powerful and rewarding tool to use. 15

More Related