Program Translation Module 6 Mid-Term Results Mid-term • Above 93/100 is A. Mid-term • 93/100 or above is A. • 60/100 or below is fail. Mid-term • Above 93/100 is A. • 60/100 or below is fail. • For students who got 120/200 or less at midterm attendance in make-up is mandatory. Mid-term • Above 93/100 is A. • 60/100 or below is fail. • For students who got 120/200 or less at midterm attendance in make-up is mandatory. • Note that April 10th 2008 is the course withdrawal deadline. Mid-term • Above 93/100 is A. • 60/100 or below is fail. • For students who got 120/200 or less at mid-term attendance in make-up is mandatory. • Note that April 10th 2008 is the course withdrawal deadline. • I will send a private email to those students who are below the fail threshold so far and let them know how good they should perform from now (future exams and HWs) on to avoid being failed. Questions • Mid-term? • Assignment 3? • Assignment 3 is due mid-night April 4th. Program Translation Module 6 Introduction • Computers are not smart. • They do only what we ask them to do. Introduction • Computers are not smart. • They do only what we ask them to do. • That is they can do whatever we know how to order it to perform. • But we use computers because they are fast and precise. The Binary Machine • A modern computer can run programs written in Java, C, C++, Lisp, JavaScript, Cobol and many others. • So the computers appear to be Multilingual. The Binary Machine • A modern computer can run programs written in Java, C, C++, Lisp, JavaScript, Cobol and many others. • So the computers appear to be Multilingual. • But every computer ever built “understands” only one language: The Binary Machine • A modern computer can run programs written in Java, C, C++, Lisp, JavaScript, Cobol and many others. • So the computers appear to be Multilingual. • But every computer ever built “understands” only one language: the machine language it is wired to use. The Binary Machine • A modern computer can run programs written in Java, C, C++, Lisp, JavaScript, Cobol and many others. • So the computers appear to be Multilingual. • But every computer ever built “understands” only one language: the machine language it is wired to use. • Thus, the machine language of an Intel PC is different than an IBM personal computer or Sun Workstation. The Binary Machine • If we want to use a language like JavaScript to write a program, first we need to have a tool to translate the program to machine language which our computer understands. Program Translation • The notion of translation is central to our discussion. • A modern programming language is designed with two audiences in mind: Program Translation • The notion of translation is central to our discussion. • A modern programming language is designed with two audiences in mind: • The programmers who use the language to write programs for computers. • The computer, which needs to execute (run) the instructions in the language. Program Translation Machine Language Here is a sample of a machine language for a hypothetical computer: 0000010010000000 0000000010000001 0000111100000000 Binary Presentation • The instructions of a machine language are represented using just 0s and 1s. Binary Presentation • The instructions of a machine language are represented using just 0s and 1s. • In the next module we’ll see that all computers represent all the information in binary notation. Binary Presentation • The instructions of a machine language are represented using just 0s and 1s. • In the next module we’ll see that all computers represent all the information in binary notation because they can only distinguish between two values (low voltage level and high voltage level), which we label as 0 and 1. Binary Presentation • The instructions of a machine language are represented using just 0s and 1s. • In the next module we’ll see that all computers represent all the information in binary notation because they can only distinguish between two values (low voltage level and high voltage level), which we label as 0 and 1. • Binary notation: a notation which uses only two symbols, 0 and 1, to present information. Binary Presentation • If the computer can work only in terms of 0 and 1, how are we going to represent, store and manipulate the information? Binary Presentation • If the computer can work only in terms of 0 and 1, how are we going to represent, store and manipulate the information? • We can use some sort of binary notation. Binary Presentation • For example we can have an easy form of binary representation called binary-coded decimal (BCD) notation, in which we use a table for converting a number to this notation and vice versa. Binary Presentation • For example we can have an easy form of binary representation called binary-coded decimal (BCD) notation, in which we use a table for converting a number to this notation and vice versa. Here is the table: Digit Binary Code Digit Binary Code 0 0000 5 0101 1 0001 6 0110 2 0010 7 0111 3 0011 8 1000 4 0100 9 1001 Examples of BCD Convert number 5683 to BCD format. Examples of BCD Convert number 5683 to BCD format. 5 6 8 3 Examples of BCD Convert number 5683 to BCD format. 5 6 8 3 By looking at BCD table and inserting the BCD code for each digit we have: 0101 0110 1000 0011 Examples of BCD Convert number 5683 to BCD format. 5 6 8 3 By looking at BCD table and inserting the BCD code for each digit we have: 0101 0110 1000 0011 So the BCD equivalent is: 0101011010000011 Examples of BCD Convert the BCD code 0100100000010000 to a decimal (base 10) number. Examples of BCD Convert the BCD code 0100100000010000 to a decimal (base 10) number. 1- Divide the sequence into chunks of length 4. Why? 0100 1000 0001 0000 Examples of BCD Convert the BCD code 0100100000010000 to a decimal (base 10) number. 1- Divide the sequence into chunks of length 4. Why? 0100 1000 0001 0000 2- Use the BCD table to find the corresponding digit for each chunk. 4 8 1 0 Examples of BCD Convert the BCD code 0100100000010000 to a decimal (base 10) number. 1- Divide the sequence into chunks of length 4. Why? 0100 1000 0001 0000 2- Use the BCD table to find the corresponding digits for each chunk. 4 8 1 0 3- Put the numbers together in the same order: 4810 Do it yourself? a. Convert the number 873 into BCD format. b. Convert 0111000010010101 to a decimal number. Do it yourself? a. Convert the number 873 into BCD format. answer: 100001110011 b. Convert 0111000010010101 to a decimal number. answer: 7095 BCD notation Disadvantages 1. For each decimal number of length n we have a BCD code of length 4n. Example: 211 and 001000010001 2. Arithmetic on numbers in BCD format is complicated. Base-10 Notation • In everyday life we represent numbers in base 10 Positional Notation. – positional: the value of a digit within a number depends on its position. Example: 342 and 432 – base 10 : the value of any position is a multiple of a power of 10. • The digits we use in this notation are: {0, 1, 2, 3, 4, 5, 6, 7,8 ,9 } Base-10 Notation Example: the number 7689 is interpreted as: Base-10 Notation Example: the number 129 is interpreted as: Base 2 Notation • There is nothing special about base 10 notation. • We can use any base to represent numbers. But since computers only understand 0 and 1 we use base 2 notation. Base 2 Notation • In base two notation we have only two digits: {0, 1} • Each digit in this notation is a multiple of a power of 2 just as in base 10 where each digit is a multiple of a power of 10. • 11010101 is an example of a number in base-2 format. Base-2 Example The number 11010101 is interpreted as : Base 2 Example • 213 in base 10 = 11010101 in base 2 Do it yourself • What base-10 number the following base-2 number represents? 10010 Do it yourself • What base-10 number the following base-2 number represents? 10010 Answer: 18 How to Convert Base-10 to Base-2 • We can convert a decimal number to base-2 using a simple algorithm. • Lets see the algorithm through examples. Example 1 • Convert decimal number 29 to binary. Example 1 • Convert decimal number 29 to binary. 1. 29 / 2 quotient = 14 remainder = 1 Example 1 • Convert decimal number 29 to binary. 1. 29 / 2 2. 14 / 2 quotient = 14 remainder = 1 quotient = 7 remainder = 0 Example 1 • Convert decimal number 29 to binary. 1. 29 / 2 2. 14 / 2 3. 7 / 2 quotient = 14 remainder = 1 quotient = 7 remainder = 0 quotient = 3 remainder = 1 Example 1 • Convert decimal number 29 to binary. 1. 2. 3. 4. 29 / 14 / 7 / 3 / 2 2 2 2 quotient = 14 quotient = 7 quotient = 3 quotient = 1 remainder = 1 remainder = 0 remainder = 1 remainder = 1 Example 1 • Convert decimal number 29 to binary. 1. 2. 3. 4. 5. 29 / 14 / 7 / 3 / 1 / 2 2 2 2 2 quotient = 14 quotient = 7 quotient = 3 quotient = 1 quotient = 0 remainder = 1 remainder = 0 remainder = 1 remainder = 1 remainder = 1 (Stop) Example 1 • Convert decimal number 29 to binary. 1. 2. 3. 4. 5. 6. 29 / 2 quotient = 14 remainder = 1 14 / 2 quotient = 7 remainder = 0 7 / 2 quotient = 3 remainder = 1 3 / 2 quotient = 1 remainder = 1 1 / 2 quotient = 0 remainder = 1 (Stop) Sequence the reminders starting from last step to first: 11101 . This is the binary (base-2) representation of 29. Another view of the algorithm Converting decimal number 29 to binary 11101 Example 2 Convert decimal 213 to binary: 1. 2. 3. 4. 5. 6. 7. 8. 9. 213 / 2 quotient = 106 Remainder = 1 106 / 2 quotient = 53 Remainder = 0 53 / 2 quotient = 26 Remainder = 1 26 / 2 quotient = 13 Remainder = 0 13 / 2 quotient = 6 Remainder = 1 6 / 2 quotient = 3 Remainder = 0 3 / 2 quotient = 1 Remainder = 1 1 / 2 quotient = 0 Remainder = 1 Stop. Sequence from last to first: 11010101 Do it yourself • Find the binary presentation of decimal 89. How to Present Text in Binary Format • Ok, we know how to represent numbers in binary format, but how about a piece of text? How to Present Text in Binary Format • Ok, we know how to represent numbers in binary format, but how about a piece of text? • Like BCD notation we can have a table which maps each character to an integer code in binary. How to Present Text in Binary Format • Ok, we know how to represent numbers in binary format, but how about a piece of text? • Like BCD notation we can have a table which maps each character to an integer code in binary. • This coding may vary from machine to machine. But many computers use a well known coding for representing characters known as ASCII (American Standard Code for Informatio Interchange). Examples of ASCII Entries Character Integer code in decimal Integer code in binary space 32 00100000 $ 36 00100100 2 50 00110010 3 51 00110011 ? 63 00111111 “ 34 00100010 A 65 01000001 B 66 01000010 a 97 01100001 b 98 01100010 z 122 01111010 Encoding Instructions • Computers understand only binary. Encoding Instructions • Computers understand only binary. • We need to feed the instructions to computer in binary format. But how do we do it? Encoding Instructions • Computers understand only binary. • We need to feed the instructions to computer in binary format. But how do we do it? • Again we need to have a table (mapping) for having a code in binary for each instruction. Encoding Instructions • Computers understand only binary. • We need to feed the instructions to computer in binary format. But how do we do it? • Again we need to have a table (mapping) for having a code in binary for each instruction. • For example we can define an 8-bit operation code followed by 8 more bits which provides details about the instruction. Bit and Byte • What is a bit? Bit and Byte • What is a bit? • A bit is a unit of storage which can store only 0 or 1. Bit and Byte • What is a bit? • A bit is a unit of storage which can store only 0 or 1. A bit storage: 0 1 Bit and Byte • What is a bit? • A bit is a unit of storage which can store only 0 or 1. A bit storage: 0 1 • Every 8-bit is called a byte. Bit and Byte • What is a bit? • A bit is a unit of storage which can store only 0 or 1. A bit storage: 0 1 • Every 8-bit is called a byte. 1 0 0 1 1 0 1 1 Bit and Byte • What is a bit? • A bit is a unit of storage which can store only 0 or 1. A bit storage: 0 1 • Every 8-bit is called a byte. 1 0 0 1 1 0 1 1 • Every 1024 byte is a kilo-byte. • Every 1024 kilo-byte is a mega-byte • Every 1024 mega-byte is a giga-byte. Encoding Instructions • We can have a 8-bit (one byte) operation code followed by 8 more bits (another byte) which gives details about the instruction. Encoding Instructions • We can have a 8-bit (one byte) operation code followed by 8 more bits (another byte) which gives details about the instruction. Example: 00000100 00110110 The architecture of our Computer • Our hypothetical computer has an 8-bit (one byte) Accumulator. The architecture of our Computer • Our hypothetical computer has an 8-bit (one byte) Accumulator. • Accumulator is a special location used for storing intermediate results of computation. The architecture of our Computer • Our hypothetical computer has an 8-bit (one byte) Accumulator. • Accumulator is a special location used for storing intermediate results of computation. • For Example you want to calculate: 97 + (210 – 113) you might write the result of subtraction on a piece of paper before adding the result with 97. The architecture of our Computer • Also our architecture has 256 bytes of memory labeled (addressed) with 0 to 255. The architecture of our Computer • Also our architecture has 256 bytes of memory labeled (addressed) with 0 to 255. • Memory (In computer terminology): Place for storing data in binary format. Smallest unit of memory is a bit. The architecture of our Computer • Also our architecture has 256 bytes of memory labeled (addressed) with 0 to 255. • Memory (In computer terminology): Place for storing data in binary format. Smallest unit of memory is a bit. • The size of the memory of today’s computers is something of magnitude of giga-bytes. The Architecture of Our Hypothetical Computer Example of Instructions of our Computer Instruction Information Code Explanation LOD X 00000100 Loads accumulator with contents of memory location X STO X 00000101 Stores accumulator value into memory location X HLT X 00001111 Halts (Stops) Execution ADD X 00000000 Adds contents of memory location X to accumulator Example Now the piece of machine language we saw previously should have a meaning to you: 0000010010000000 0000000010000001 0000111100000000 Example [1] 0000010010000000 [2] 0000000010000001 [3] 0000111100000000 We separate the sequences into bytes (chunks of length 8): Example [1] 0000010010000000 [2] 0000000010000001 [3] 0000111100000000 We separate the sequences into bytes (chunks of length 8): [1] 00000100 10000000 [2] 00000000 10000001 [3] 00001111 00000000 Example [1] 00000100 10000000 [2] 00000000 10000001 [3] 00001111 00000000 First byte is the code for instruction. So we must look for the corresponding instruction in the table: Example [1] 00000100 10000000 [2] 00000000 10000001 [3] 00001111 00000000 First byte is the code for instruction. So we must look for the corresponding instruction in the table: LOD 10000000 ADD 10000001 HLT 00000000 Example The second byte represents details about Instruction which is an integer in binary format: LOD 10000000 ADD 10000001 HLT 00000000 10000000 represents 128 in decimal, 10000001 represents 129 in decimal and 00000000 is 0. Example Putting all together we have : LOD 128 ADD 129 HLT 0 This is a piece of language called assembly Language. Assembler • A program that takes as its input a program written in assembly and outputs the same program written in Machine Language. Assembler • A program that takes as its input a program written in assembly and outputs the same program written in Machine Language. LOD 128 Sourcex ADD 129 HLT 0 Assembler 0000010010000000 0000000010000001 0000111100000000 Going Further Now assume a programmer writes a program in a high level language such as JavaScript. The programmer needs to programs to make her/his program understandable to computer: Compiler and Assembler. Going Further Now assume a programmer writes a program in a high level language such as JavaScript. The programmer needs to programs to make her/his program understandable to computer: Compiler and Assembler. …. If(x == 4) Document. write(<b>); …. Compiler LOD 128 ADD 129 HLT 0 Assembler 0000010010000000 0000000010000001 0000111100000000 Assembly • There are many programmers who write their programs directly in assembly as opposed to any high level language such as Java, because Assembly • There are many programmers who write their programs directly in assembly as opposed to any high level language such as Java, because – It gives the programmer a precise control of the computer’s functionalities. – In most cases the programs written directly in assembly language are faster than programs written in high level languages. Back to our piece of Assembly code LOD 128 ADD 129 HLT 0 Back to our piece of Assembly code LOD 128 ADD 129 HLT 0 LOD 128 : Loads the contents of memory location (a byte) 128 into accumulator. Back to our piece of Assembly code LOD 128 ADD 129 HLT 0 LOD 128 : Loads the contents of memory location (a byte) 128 into accumulator. ADD 129: Adds the number 129 to the number already in accumulator and puts the result in accumulator. Back to our piece of Assembly code LOD 128 ADD 129 HLT 0 LOD 128 : Loads the contents of memory location (a byte) 128 into accumulator. ADD 129: Adds the number 129 to the number already in accumulator and puts the result in accumulator. HLT : Stops the process. Another Example LOD 213 ADD 214 ADD 215 ADD 216 ADD 217 STO 213 HLT What does this program do? The assembly Instructions for our Machine Conventions: 1. All variables refer to 8-bit binary number. The assembly Instructions for our Machine Conventions: 1. All variables refer to 8-bit binary number. ex: LOD X X is an 8-bit number ( [0-255]) The assembly Instructions for our Machine Conventions: 1. All variables refer to 8-bit binary number. ex: LOD X X is an 8-bit number ( [0-255]) 2. Variables can represent a number or an address. A number is indicated by a leading pound sign (#). The assembly Instructions for our Machine Conventions: 1. All variables refer to 8-bit binary number. ex: LOD X X is an 8-bit number ( [0-255]) 2. Variables can represent a number or an address. A number is indicated by a leading pound sign (#). ex: LOD 123 and LOD #123 LOD 123 Load the contents of memory location 123 into the accumulator LOD #123 Load number 123 into the accumulator. The assembly Instructions for our Machine Another ex: ADD 212 & ADD #212 ADD 212 : Add the contents of memory location 212 to accumulator. ADD #212 : Add number 212 to accumulator. 3. We use letter A to refer to the accumulator. Data Flow Instructions Instruction Variable Explanation LOD X Load the contents of memory location specified with address X into accumulator. ,, #X Load the number X into accumulator. STO X Store the contents of memory location specified with address X Into accumulator. ,, #X Store the number X into accumulator. Arithmetic Instructions Instruction Variable Explanation ADD X Add the contents of memory location specified by address X to contents of accumulator. ,, #X Add the number X to contents of accumulator. SUB X Subtract the contents of memory location specified by address X from contents of accumulator. ,, #X Subtract number X from contents of accumulator. MUL X Multiply the contents of accumulator by the contents of memory location specified by address X. ,, #X Multiply the contents of accumulator by number X. Control Instructions • A program is a sequence of instructions. Control Instructions • A program is a sequence of instructions. • In normal condition during the execution of the program (assembly program in our case) , the computer starts with execution of first instruction, followed by second, third and all the way to the last instruction. Control Instructions • A program is a sequence of instructions. • In normal condition during the execution of the program (assembly program in our case) , the computer starts with execution of first instruction, followed by second, third and all the way to the last instruction. • But sometimes we want to change this normal flow of instruction executions. Control Instructions • A program is a sequence of instructions. • In normal condition during the execution of the program (assembly program in our case) , the computer starts with execution of first instruction, followed by second, third and all the way to the last instruction. • But sometimes we want to change this normal flow of instruction executions. • We use control instructions to direct the flow of instruction execution in a way that we have in mind. Control Instructions An example of situation where we want to change the flow of execution: We have sequence of three instructions: instruction 1 instruction 2 instruction 3 and we need to run this sequence 20 times. Control Instructions One way to write such program: instruction 1 – instruction 2 instruction 3 instruction 1 instruction 2 instruction 3 . . . instruction 1 instruction 2 instruction 3 That is to repeat the sequence of three instructions 20 times in our program. Control Instructions Smarter algorithm: Step 1: Set memory location X to 20 Step 2: if the contents of memory location X is not zero execute the sequence: instruction instruction 2 instruction 3 Subtract the contents of memory location X by 1 Jump to step 2 else HLT Control Instructions Instruction Variable Explanation JMP Y Jump to instruction number Y (Go to Y-th instruction in the program ) JMZ Y Jump to instruction number Y if the contents of accumulator is 0. Otherwise , go to next instruction. HLT Halt execution (Stop the execution). Don’t do anything more. Example 1 LOD 213 ADD 214 ADD 215 ADD 216 ADD 217 STO 213 HLT Example 2 LOD 212 ;Load the memory location 212 into accumulator ADD #1 ;Add one to accumulator STO 213 ;Store the contents of accumulator into memory ADD #1 ;location 213 STO 214 ADD #1 STO 215 HLT Comment • Comments are little explanatory notes for programmers inside the program. Comment • Comments are little explanatory notes for programmers inside the program. • In our assembly language, a comment is anything from the semicolon (;) to the end of the line. Comment • Comments are little explanatory notes for programmers inside the program. • In our assembly language, a comment is anything from the semicolon (;) to the end of the line. • These notes are ignored by assembler. That is they have no effect on what the programs do. Do it yourself. What number in binary format will be in memory location 197 at the end of the program? LOD #2 ;Load the number 2 into accumulator . MUL #2 MUL #2 MUL #2 MUL #2 ;Multiply by 2 the contents of accumulator. ADD #2 ADD #2 SUB #2 ;Subtract 2 from the contents of the accumulator. STO 197 HLT Using Control Instructions • Here is a program which uses some of the control instructions. [1] LD #0 [2] STO 123 [3] SUB 210 [4] JMZ 9 ; Jump to instruction 9 if the contents of acc. is 0 [5] LD 123 [6] ADD #1 [7] STO 123 [8] JMP 3 ;Jump to instruction 3 [9] HLT • Can you write a simpler program which does the same job? • What will the program do if we change number 210 to 55 in line 3?