PDE

advertisement
CS 161
Introduction to Programming
and Problem Solving
Chapter 6
Programming Development
Environment
Herbert G. Mayer, PSU
Status 10/20/2014
Syllabus

What is a Program?

What is a Computer?

Holding Data

Programming Languages

Machine Language Sample

Compiler

Linker

Loader

Debugger

Quick Excursion to C++

While Loops in C++
Acknowledgments
Numerous graphs and pictures used here have been
copied as-is from ECE 103 teaching material developed
by professor Phillip Wong at PSU
What is a Program




A computer program is a sequence of executable
machine instructions, reading information (input),
computing new data, and generating output,
according to the steps of an algorithm
An algorithm is a finite sequence of instructions,
reading information (input), computing new data, and
generating output
The two are almost synonymous, except that the
program executes (AKA runs) on a computer, the
algorithm is just an abstraction in our mind or written
on paper
The algorithm coded in a programming language
becomes your program
What is a Computer





A computer is a physical device that can read input, compute,
and produce corresponding output
It “understands” a small set of machine instructions, which it
can execute, one at a time (for a uni-processor)
It is possible, but very tedious, to write a program in such
machine instructions
An Assembler eases this tediousness by allowing users to write
abstract data and symbolic instructions, which the assembler
then translates into machine code
A compiler (similar: an interpreter) reads higher-level programs
and maps them into assembly code; or sometimes into machine
code directly
What is a Computer
Main Memory
(RAM, ROM)
Input
Processor
Output
(e.g., keyboard, mouse)
(CPU)
(e.g., monitor, printer)
Auxiliary Storage
(e.g., disk drives)
What is a Computer’s Processor?
Instruction
Decoder
Memory
Interface
Registers
(fast storage)
ALU
The ALU (Arithmetic Logic Unit) performs basic
arithmetic, logic, and comparison operations.
To main
memory
Holding Data







A computer holds a good amount of data in memory
The size of such a memory (AKA primary storage) is
defined by the architecture’s address range
E.g. on a 32-bit architecture, memory can be as large
as 232 different addressable units
Often such units are bytes, i.e. 8-bit addressable,
contiguous units; other architectures use 60-bit words
Large amounts of data are stored on secondary
storage devices, such as rotating disks or SSDs
Access to data in memory is slow, about 10-100 times
slower than executing one instruction
Access to data on disk is even 10,000s of times slower
Holding Data



Getting data from memory into the processor
(usually a machine register) is called a load
operation
Moving data from a register to memory is called a
store operation
Such transport proceeds on a bus; the width of the
bus and its speed are critical for the overall
execution speed of the machine and thus of your
programs
Programming Languages





Even writing assembly source code is highly tedious
Since the 1960s, higher-level programming
languages have been developed
Some of these are machine-independent; others
highly machine-dependent (AKA architecturedependent)
A machine-independent language allows writing of
source programs (code) that can be executed on
different machines, provided a compiler is available
on each
This is referred to a portability of source programs,
quite a desirable property!
Programming Language Milestones
C Language Milestones
1969 to 1973 – C (Bell Labs initial development)
1978 – K&R C (Kernighan and Ritchie)
1989 – C89 (ANSI)
1990 – C90 (ISO)
1995 – C90 Normative Amendment 1 → "C95”
1999 – C99 (ISO)
2011 – C11 (ISO)
Machine Language Sample
600:
602:
603:
605:
A9 5A
18
69 20
8D 00 10
LDA #$5A
CLC
ADC #$20
STA $1000
;
;
;
;
Load accumulator with number
Clear carry flag
Add $20 to accumulator w/carry
Store accumulator at $1000
Assembler translates an assembly program to machine
language
Assembly language still requires a high level of
programmer expertise
Compiler




Compiler is a special-purpose system program that
reads source programs, written in the source
language and translates them into machine language
Mapping into machine language (AKA object code)
sometimes involves an intermediate step: Creating
assembly source first, and then using the assembler
to generate machine code
A compiler generally understands just one input
language; exceptions are some C++ compilers that
also read C source
Compilers emit error messages when certain
violations are detected
Compiler

Source files contain the C++ program code
 .cpp extension (file is in text format); also .c

Header files can contain prototypes, macros, data
type declarations, or code
 .h extension (file is in text format)

Object files contain intermediate compiled code
 .o -or- .obj extension

Executable files contain runnable binary code
 .out -or- .exe -or- no extension
Compiler




preprocessor → handles preprocessor directives and
expands macro definitions
compiler → takes preprocessed source code files and
translates them to intermediate code; for beginners it is
convenient to view the other system programs as part of
the compiler
assembler → takes intermediate code files and
translates them to binary object code
linker → resolves references among the object files and
the libraries. It puts all the parts together to create the
final executable file
Compiler
prog_1.o
prog_1.c
prog_2.o
prog_2.c
Preprocessor
Compiler
Assembler
Linker
prog_3.c
etc.
User
Header files
prog_1.h
prog_2.h
prog_3.h
etc.
Executable
file
Object files
Source files
prog
prog_3.o
etc.
Library
Header files
Library files
stdio
stdio.h
stdlib.h
math.h
etc.
stdlib
math
etc.
16
Linker






Often programs are composed of multiple source
programs
For example, some projects are too large to have a
single programmer develop all code in sequence
Also system function, such as input, output, heap
acquisitions etc. are provided in the PDE, and do
need to be coded by the programmer
All such elements are linked together into a single,
executable object program
That is the work of the system’s linker
For C on Unix the link step is frequently hidden, i.e.
not visible to the programmer
Loader




When a program has been linked, it is still not
executable
Instead, it is just a binary file, residing on some disk,
as an object file
To run such object code, it must be loaded into
memory and be granted processor execution time
That is the purpose of the system laoder
Example: Vintage CPU (1975)
MOS 6502




64 KB main

Registers:






Die Shot
Single core
8-bit data
Memory


Pin-out
Accumulator (A)
Index (X, Y)
Processor Status (P)
Stack Pointer (S)
Program Counter (PC)
Speed: 1 to 2 MHz
Process: 8 m
# of transistors: ~3500
19
Example: Modern CPU (2013)
Intel i7-4770 Haswell



Package
Four cores
64-bit data
Memory
4x256 KB L2 cache
 8 MB L3 cache
 32 GB main (3.2x107 KB)


Registers:






Die Shot
8 32-bit
16 64-bit
Integrated GPU
Speed: 3.4 GHz (3400 MHz)
Process: 22 nm (0.022 m)
# of transistors: ~1.4 billion
20
Quick Excursion to C++








You now know C++ arrays
The type of an array element may be any legal C++ type,
including array, in which case you declare multidimensional arrays
To manipulate arrays, generally you need loops
Loops are syntactic constructs that allow the programmer
to do steps repetitively
We also call this: iteratively
Loops iterate over a so called iteration space
C++ has while, for, and do loops
Here we discuss while loops
While Loop in C++


1.
2.
3.

Formally, there are no while statements, just expressions
in C++, we ignore this language politics for the moment
A while statement consists of 3 parts:
Reserved keyword while
A parenthesized expression, interpreted as boolean
And 1 statement (formally an expression)
Example:
while( i < MAX_SIZE ) {
process_vector( i++ ):
} // end while

The single statement may, of course, be a compound
statement
While Loop in C++





A while statement executes, as long as the boolean
expression in the pair of ( and ) yields true
When the expression is false, the while statement ends,
and the operation after the while is executed next
Usually, some operation in the body of the while –inside
the single statement, which may be a compound
statement-- must ensure that the boolean condition is
false eventually
Else you constructed an infinite loop
Note that the boolean condition could be false at the
start, in which case the wile is empty, i.e. executed 0
times
While Loop in C++
// declaration of some array
#define TEN 10
char digits[ TEN ];
// loop to initialize digits[]
int i = 0;
while ( i < TEN ) {
digits[ i ] = ‘0’ + i++;
} //end while
// no compound needed, but is a good habit
While Loop in C++
// declaration of some array
#define TEN 10
char digits[ TEN ];
// loop to print digits[]
int i = 0;
while ( i < TEN ) {
cout << “digits[“ << i << “]= “
<< digits[ i ] << endl;
i++;
} //end while
// no compound needed, but is a good habit
Download