1 / 36

Program Translation

Program Translation. Module 6, Analytical Engine. Review. We have learned… about local applications, global applications, and the logical problem solving that programmers use to build them. Today: How the Computer Works. Binary Representation of Data Abstracting Information

bayle
Download Presentation

Program Translation

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. Program Translation Module 6, Analytical Engine

  2. Review • We have learned… • about local applications, • global applications, • and the logical problem solving that programmers use to build them

  3. Today: How the Computer Works • Binary Representation of Data • Abstracting Information • Language Abstraction Levels • Language Design Issues and Solutions • Converting between levels • Phases and Techniques used • Language Generations

  4. Begin Input: NumDays double mass = 2.5;int numPennies = 1;while (mass < 1000){ numPennies *= 2; mass = numPennies * 2.5;}System.out.println(numPennies);System.exit(0); Mass = 2.5 NumPennies = 1 End Mass <1000? Display NumPennies NO YES Double NumPennies Mass = NumPennies * 2.5

  5. Machine Code • Computers only understand machine code. • Ex: 1000110100100010101 • Humans write programs in programming languages as in the previous example. • How do we get from one to the other?

  6. Binary: As low as we go • Boole (and others) noted that all discrete data can be represented with two complementary symbols (0/1, T/F, off/on, up/down) This is called Binary Notation • AE text uses Rosetta Stone as a metaphor for the link between various languages • We need a way to translate!

  7. Base Ten Number Systems • We usually use 10 digits (0 – 9) to express all numbers. • How do we express numbers bigger than 9? • 124 = (1x102) + (2x 101) + (4x100) = 100 + 20 + 4

  8. Binary Numbers • What if we only had 2 digits? (0 and 1) • I’d have to count like this:0 01 12 103 114 100: :

  9. Base Two (Binary) To Base 10 • What does 10111 equal in base 10? • Write the powers of two

  10. Base Two (Binary) To Base 10 • What does 10111 equal in base 10? • Write the powers of two 16 8 4 2 11 0 1 1 1 16 + 4 + 2 + 1 = 23!

  11. Base 10 to Binary • How do you write 28 in binary? • Write the powers of 2 again 16 8 4 2 1

  12. Base 10 to Binary • Write 28 in binary • How many times does 16 go into 28? 16 8 4 2 1 1 What’s left? 12 That’s an 8 and a 4. The number in binary is 11100. Be sure to go from largest possible power of two down to 1.

  13. Letter Data • Map each letter to a numeric value • ASCII standard (AE, p. 246) • Each letter takes 8 1’s and 0’s to encode. • Each 1/0 slot is called a bit. • 8 bits = 1 byte 01000001 = A

  14. Inside the Computer • 256 memory “slots”, numbered 0 – 255 • One special slot, called accumulator • Each slot is enough bits to hold a number (in binary) • Accumulator is used as a place to do arithmetic

  15. Binary Instructions • We need to encode whole commands • Could use ASCII, but not efficient • Each instructions maps to a unique opcode • Operation Code • Tells which operation we want to do next • Last bits give the address where the data is stored.

  16. Instruction layout opcode operand Each box contains a byte

  17. Example Instructions 00000100 X Load the accumulator with whatever is in slot X 00000101 X Store accumulator value in slot X 00001111 X Halt execution 00000000 X Add contents of slot X to the accumulator

  18. Example Program Accumulator 00000100 10000000(load) (128) 00000000 10000001(add) (129) 00000101 10000000(store) (128) 00011111 00000000(halt) Memory 128 00000110 Memory 129 00001001

  19. Example Program Accumulator 00000100 10000000(load) (128) 00000000 10000001(add) (129) 00000101 10000000(store) (128) 00011111 00000000(halt) Memory 128 00000110 00000110 Memory 129 00001001

  20. Example Program Accumulator 00000100 10000000(load) (128) 00000000 10000001(add) (129) 00000101 10000000(store) (128) 00011111 00000000(halt) Memory 128 00001111 00000110 + Memory 129 00001001

  21. Example Program Accumulator 00000100 10000000(load) (128) 00000000 10000001(add) (129) 00000101 10000000(store) (128) 00011111 00000000(halt) Memory 128 00001111 00001111 Memory 129 00001001

  22. Example Program Accumulator 00000100 10000000(load) (128) 00000000 10000001(add) (129) 00000101 10000000(store) (128) 00011111 00000000(halt) Memory 128 00001111 00001111 Memory 129 00001001

  23. Practice • Write a program to compute whatever is in slot 00000001 to the third power.

  24. Machine Language • Programming in machine language is HARD. • Find the arithmetic error (not really!)00000001 0001010000010001 0001001000000011 0001000000000110 0001000100001110 10001001

  25. Assembler • Want to type: Load x Add y Store x Halt • Write a program (in machine language) that translates words into machine language • Words are called Assembly Language, and the program that translates it is called the assembler.

  26. Sample PIPPIN Opcodes

  27. Example PIPPIN program ; PIPPIN code for Z = X + Y [1] LOD X ; acc <= X [2] ADD Y ; acc <= acc + Y [3] STO Z ; acc => Z [4] HLT ; halt ; other examples AE pp. 252-4

  28. Other Languages • Wouldn’t it be easier to just write Z = X + Y? • Assembly language is called low-level: It has one line of code for one line of machine language • High-level languages make the code more compact (Java, C++, JavaScript, SmallTalk)

  29. High and Low level Languages • Low Level:LOD X ; acc <= XADD Y ; acc <= acc + YSTO Z ; acc => ZHLT ; halt • High Level: Z = X + Y • What are we giving up by using a high level language?

  30. More Translation • Now we need to translate the high-level language to Assembly language • Two types of programs accomplish this: • Interpreter: Translate one line, then execute it, then translate the next line… • Compiler: Translate the whole program at once, then execute. • An interpreter: “Beat the eggs, beat the eggs, beat the eggs,…” • A compiler: “Beat the eggs until stiff peaks form.”

  31. High level Benefits • Easier and faster to program • Have special ways of grouping data together • The way the language looks is tailored to the people who will use it.

  32. How? • How does this translation process work? • Three steps: • Scanning: Look at each word • Parsing: Figure out what each word refers to • Code Generation: Write out the assembly code

  33. Programming Language Generations • First generation: Machine language, different for each computer you work on • Second generation: Assembly language (still machine-specific) • Third generation: “High level” – now same code works on all machines.

  34. Programming Language Generations • Fourth Generation: Programming languages designed to look more like English:get customerlist name, address • Fifth Generation: Used mostly in artificial intelligence: Languages designed to explain the problem, not necessarily obvious how it’s solved – that’s left to the computer.

  35. Example Fifth Generation Program(Prolog) mom(shannon, freda). dad(shannon, charles). mom(sheila, freda). dad(jeff, charles). sibling(X,Y) :- mom(X,Z), mom(Y,Z) sibling(X,Y) :- dad(X,Z), dad(Y,Z) ?- sibling(shannon, X). X = sheila, jeff.

  36. Practice Problems (Recommended) • What is an assembler? Why use one? • Write a PIPPIN program to triple the value that is presently in the accumulator. • Convert to decimal: 111111011011100011 • Convert to binary:473581023

More Related