* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Programming Development Environment
Survey
Document related concepts
Reactive programming wikipedia , lookup
Abstraction (computer science) wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Structured programming wikipedia , lookup
Object-oriented programming wikipedia , lookup
Go (programming language) wikipedia , lookup
Name mangling wikipedia , lookup
Stream processing wikipedia , lookup
Library (computing) wikipedia , lookup
Program optimization wikipedia , lookup
C Sharp (programming language) wikipedia , lookup
History of compiler construction wikipedia , lookup
One-pass compiler wikipedia , lookup
Assembly language wikipedia , lookup
Transcript
ECE 101 Exploring Electrical Engineering Chapter 9 Programming Development Environment Herbert G. Mayer, PSU Status 3/1/2016 Syllabus What is a Program? What is a Computer? Holding Data Programming Languages Machine Language Sample Compiler Linker Loader 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 What is a Program The algorithm coded in a programming language becomes your program (noun) Why relevant to Electrical Engineers? Sooner or later you will acquire programming skills Either in a general purpose programming language Or a special programming language controlling a connected board Can be external or inserted internal into backplane of a computer But you will program (verb) eventually 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 And you, EEs, will design and build the next generation of computers 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) Computer’s Processor – CPU or ALU 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), e.g. C++ or Java 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, referring messages to line numbers 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 source 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 single, final, executable object 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 or 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 executing, not even loaded! Instead, it is just a binary file, residing on some disk, as an object file, but ready to run To run such object code, it must be loaded into memory and be granted processor execution time That is the purpose of the system loader Generally, the loader and load function are not directly visible to the user = programmer Example: Vintage CPU (1975) Pin-out Die Shot MOS 6502 Chuck Peddle at MOS Single core 8-bit data Memory 64 KB main Registers: Accumulator (A) Index (X, Y) Processor Status (P) Stack Pointer (S) Program Counter (PC) Speed: 1 to 2 MHz <- not a typo! Process: 8 m # of transistors: ~3500 19 Example: Modern CPU (2013) Intel i7-4770 Haswell Package Four cores = processors = CPUs 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