ppt - Course Website Directory

Download Report

Transcript ppt - Course Website Directory

• What is the difference between machine
code and C?
•
Why use C?
•
How do execution of C and Matlab
programs differ?
•
What are three methods of expressing a
program algorithm?
•
Related Chapters: ABC Chapters 0 & 1 & 11.3
10-2
Auxiliary
Storage
Output
Devices
System Unit
0 - 3 instr1
4-7
instr2
..
..
.
.
100 -107 101.101
108 -109
-75
110 -121
label
Memory
Addresses
Input
Devices
Main
Memory(RAM)
Control
Unit (CU)
Arithmetic
-Logic Unit
(ALU)
CPU
Main (Internal) Memory:
• All data and instructions are stored in main
memory as a sequence of 0’s and 1’s called Bits
(Binary Digits)
• Byte (smallest addressable element of memory)
Storage size for one character of information
(ASCII-8 8 bits). Every (single) address refers to
a byte in memory.
• 210 bytes is defined as 1 kilo-byte (1KB)
220 bytes is defined as 1 mega-byte (1MB)
230 bytes is defined as 1 giga-byte (1GB)
10-4
Central Processing Unit (CPU):
• Transfers information into, out of, and between
memory locations.
• Executes instructions stored in memory.
• Set of instructions for a CPU is known as a
machine language.
• Each CPU (Intel Core i7, IBM PowerPC, ...) has
its own specific machine language.
10-5
Instruction
Cycle
Main Memory
Control Unit
1
Fetch
2
Decode
Execution
Cycle
CPU
RAM
4
Store
3
Execute
Arithmetic/Logic Unit
Includes Cache
(very fast memory)
Classified as
Low Level

• Machine Language
(binary-based code; machine dependent)
• Assembly Language
(mnemonic form of machine language)
10-7
High Level

• Closer to natural languages.
• Generally, machine independent
• Usually, several machine instructions are
combined into one high-level instruction.
• Examples:
FORTRAN COBOL BASIC
Python
Ada
PL/I
C
GPSS C++
Java
Lisp
Matlab
10-8
To illustrate differences in syntax for language
levels, consider how a computer could be
instructed to subtract two numbers stored in
memory address locations 64 and 2048 and put the
result in location 2048:
Variable
Names
increment
64
value
2048
Memory
Addresses
10-9
Variable
Names
increment
value
• Machine Language:
64
Memory
Addresses
2048
0111110000000100000000100000000000
(6-bit OpCode, 14-bit address fields with
values 64 and 2048)
10-10
Variable
Names
increment
value
64
2048
Memory
Addresses
• Assembly Language:
S
increment,value
• C Language:
value = value - increment;
10-11
Programs written in high-level languages
must be converted to machine language.
Two approaches:
(1) Compilation (see p. 28 FER Figure 2.4)
Used with C, C++, Fortran,...
(2) Interpretation
Used with Matlab, Visual Basic,...
10-12
Step 1) Use editor to create a “source” file.
We will name source files with a suffix “.c”
Step 2) Run the gcc compiler on the source file to create an
executable or object file with the default name a.out .
For CS101 we will only create executable files.
Step 3) Check to see if gcc caught any syntax errors ,
if so go back to step 1)
Step 4) Run the program by typing
> ./a.out
at the Unix prompt
Computer programming is the art/science of
transforming a “real world” problem into a finite
sequence of instructions(statements) in a
computer language.
The method stated in the following slide will be
used throughout the rest of the semester.
Follow this method in your Labs and for any Machine
Problem.
10-14
1. Requirements Specification (Problem Definition)
2. Analysis---Refine, Generalize, Decompose the problem
definition
(i.e., identify sub-problems, I/O, etc.)
3. Design---Develop Algorithm
(processing steps to solve problem)
Use one of the following:
Natural-Language Algorithm
Flowchart Algorithm
Pseudo-code Algorithm
4. Implementation --- Write the "Program" (Code)
5. Verification and Testing --- Test and Debug the Code
10-15
1. Requirements Specification (Problem Definition)
Given a light-bulb with a pre-measured power
consumption(in watts), compute the
resistance (in ohms) of the bulb.
2. Analysis---Refine, Generalize, Decompose the problem
definition
(i.e., identify sub-problems, I/O, etc.)
Input = real number representing power
Output=real number representing resistance
10-16
3. Design---Develop Algorithm
Natural-Language Algorithm
Prompt user for the power dissipation
Read power
Store value in storage location called power.
Compute the resistance solving the formula
“power = (voltage*voltage)/resistance” in terms of
resistance.
resistance = (voltage * voltage)/ power
Print out the value stored in location resistance.
10-17
3. Design---Develop Algorithm
Pseudo-code Algorithm
print “enter power in watts”
read power
resistance = (117.0 * 117.0)/power
print resistance
10-18
3. Design---Develop Algorithm
start
Flowchart Algorithm
Flow is assumed down
unless otherwise
specified with an
arrow.
Trapezoid used to
designate I/O.
Rectangle used to
designate one or more
statements in a block.
Circle used as
continuation symbol
for transfer to another
page.
Output : “enter power in watts”
Input : power
Compute: resistance=(117*117)/power
Output::resistance
stop
4. Implementation --- Write the "Program" (Code)
(see the next slide)
The lecture slides show the use of the gedit
editor but the choice of editor is not critical.
10-20
C Code Implementation of the Algorithm
/* C Program to compute the resistance */
/* of a light-bulb.*/
#include <stdio.h>
#define VAC 117.0
void main(void)
{
/* Declare variables. */
float power, resistance;
/* request user input power of */
/* light-bulb in watts. */
printf(”Please enter power(watts) :”);
/* read value power */
scanf("%f", &power);
/* Compute resistance assuming VAC = 117. */
resistance = (VAC * VAC) /power;
/* Output the calculated resistance. */
printf(”Resistance is %f (ohms)\n", resistance);
}
(Note indentation scheme in above code.)
C program compilation
Open gedit and enter
your code. Note the & .
C program compilation
Click the “Save” button in gedit to save your code but
don’t close the gedit window.
Click on the xterm window and type the command to
compile your code.
C program compilation
Use the “gcc” program to compile your C source code in
the file “resistance.c”.
> ls
resistance.c
resistance.c~
Note: backup files begin and/or end with a ~ or a # symbol.
Do not edit or compile these files!
> gcc resistance.c
The “gcc” program will not alter the file “resistance.c”.
The output of “gcc” is by default contained in the file
“a.out”. The file “a.out” is called an executable file.
(continued on next slide)
C program compilation
Note that the “gcc” program noted an error on line 18 in
the program and “gcc” generated a warning for line 7.
Also, note that there is no a.out file listed. Errors cause
gcc to abort and you will not get an a.out file.
Go back to gedit line 18 and fix the syntax error.
(continued on next slide)
The error on line 18 was actually caused by a missing
semicolon on line 16.
In C a semicolon means “end of statement”. This differs
from Matlab where a semicolon means suppress output
and is optional. Since there was no semicolon after line
16, C assumed that lines 16 - 18 represented one C
statement. That is incorrect syntactically, so gcc (the
compiler program or compiler for short) generated an
error message and terminated before producing an a.out
file.
C program compilation
After adding a semicolon to the end of line 16, Click “Save”
in gedit and go back to the xterm and type again...
Note: The dot-slash in “ ./a.out ” means “ in this working
directory”. If you type “ a.out ” at the Unix prompt Unix will
first search your home directory for a file “ a.out ”. Of course
this would not be the same “ a.out ” file you created in
another directory.
A CPU only executes machine code which consists of instructions
that are specific to a particular manufacturer. The machine code is
a sequence of ones and zeros.
The C language is more human-language-like than machine code
and can be converted to machine code by using a compiler (gcc in
CS101). C code is more portable than machine code.
In the design and development of an algorithm we can use any
combination of “Natural Language”, “Pseudo-code” and “Flowchart” .
Matlab code is executed by means of an interpreter that is running
in the Matlab “environment”. Each time the Matlab code runs the
interpreter converts the code into machine code.
C code is compiled into an executable file (machine code) once.
We then run the program (default name a.out) by typing the
command (./a.out)_at the Unix prompt.
10-28