1 Assembly Language Professor Jennifer Rexford COS 217.

Slides:



Advertisements
Similar presentations
RAM (cont.) 220 bytes of RAM (1 Mega-byte) 20 bits of address Address
Advertisements

Practical Malware Analysis
Instruction Set Design
Chapter 8: Central Processing Unit
Chapter 2 Data Manipulation Dr. Farzana Rahman Assistant Professor Department of Computer Science James Madison University 1 Some sldes are adapted from.
1 Lecture 3: Instruction Set Architecture ISA types, register usage, memory addressing, endian and alignment, quantitative evaluation.
RISC / CISC Architecture By: Ramtin Raji Kermani Ramtin Raji Kermani Rayan Arasteh Rayan Arasteh An Introduction to Professor: Mr. Khayami Mr. Khayami.
INSTRUCTION SET ARCHITECTURES
Machine Instructions Operations 1 ITCS 3181 Logic and Computer Systems 2015 B. Wilkinson Slides4-1.ppt Modification date: March 18, 2015.
Computer Organization and Architecture
Tuan Tran. What is CISC? CISC stands for Complex Instruction Set Computer. CISC are chips that are easy to program and which make efficient use of memory.
Computer Organization and Architecture
CS2422 Assembly Language & System Programming September 19, 2006.
Processor Technology and Architecture
1 Computer Architecture and Assembly Language COS 217.
Assembly Language for Intel-Based Computers Chapter 2: IA-32 Processor Architecture Kip Irvine.
Chapter 4 Processor Technology and Architecture. Chapter goals Describe CPU instruction and execution cycles Explain how primitive CPU instructions are.
Choice for the rest of the semester New Plan –assembler and machine language –Operating systems Process scheduling Memory management File system Optimization.
State Machines Timing Computer Bus Computer Performance Instruction Set Architectures RISC / CISC Machines.
Chapter 2.2 Machine Language.
Chapter 2: Impact of Machine Architectures What is the Relationship Between Programs, Programming Languages, and Computers.
1 Assembly Language: Overview. 2 If you’re a computer, What’s the fastest way to multiply by 5? What’s the fastest way to divide by 5?
Group 5 Alain J. Percial Paula A. Ortiz Francis X. Ruiz.
Part 1.  Intel x86/Pentium family  32-bit CISC processor  SUN SPARC and UltraSPARC  32- and 64-bit RISC processors  Java  C  C++  Java  Why Java?
Machine Instruction Characteristics
IT253: Computer Organization Lecture 4: Instruction Set Architecture Tonga Institute of Higher Education.
1 4.2 MARIE This is the MARIE architecture shown graphically.
Computers organization & Assembly Language Chapter 0 INTRODUCTION TO COMPUTING Basic Concepts.
ITEC 352 Lecture 12 ISA(3). Review Buses Memory ALU Registers Process of compiling.
Fall 2012 Chapter 2: x86 Processor Architecture. Irvine, Kip R. Assembly Language for x86 Processors 6/e, Chapter Overview General Concepts IA-32.
CSC 3210 Computer Organization and Programming Chapter 1 THE COMPUTER D.M. Rasanjalee Himali.
Computer architecture Lecture 11: Reduced Instruction Set Computers Piotr Bilski.
Part 1.  Intel x86/Pentium family  32-bit CISC processor  SUN SPARC and UltraSPARC  32- and 64-bit RISC processors  Java  C  C++  Java  Why Java?
Chapter 8 CPU and Memory: Design, Implementation, and Enhancement The Architecture of Computer Hardware and Systems Software: An Information Technology.
Module : Algorithmic state machines. Machine language Machine language is built up from discrete statements or instructions. On the processing architecture,
CSC 2400 Computer Systems I Lecture 9 Deeper into Assembly.
Important Concepts  Parts of the CPU  Arithmetic/Logic Unit  Control Unit  Registers  Program Counter  Instruction Register  Fetch/Decode/Execute.
Oct. 25, 2000Systems Architecture I1 Systems Architecture I (CS ) Lecture 9: Alternative Instruction Sets * Jeremy R. Johnson Wed. Oct. 25, 2000.
Stored Programs In today’s lesson, we will look at: what we mean by a stored program computer how computers store and run programs what we mean by the.
Processor Structure and Function Chapter8:. CPU Structure  CPU must:  Fetch instructions –Read instruction from memory  Interpret instructions –Instruction.
Digital Computer Concept and Practice Copyright ©2012 by Jaejin Lee Control Unit.
1 The Instruction Set Architecture September 27 th, 2007 By: Corbin Johnson CS 146.
Overview von Neumann Architecture Computer component Computer function
1 Assembly Language Part 2 Professor Jennifer Rexford COS 217.
Simple ALU How to perform this C language integer operation in the computer C=A+B; ? The arithmetic/logic unit (ALU) of a processor performs integer arithmetic.
CMSC 104, Lecture 061 Stored Programs A look at how programs are executed.
1 Basic Processor Architecture. 2 Building Blocks of Processor Systems CPU.
Chapter 2 Data Manipulation © 2007 Pearson Addison-Wesley. All rights reserved.
Computer Organization 1
Digital Computer Concept and Practice Copyright ©2012 by Jaejin Lee Control Unit.
Chapter Overview General Concepts IA-32 Processor Architecture
Computers’ Basic Organization
Assembly language.
Computer Organization
IA32 Processors Evolutionary Design
Control Unit Lecture 6.
ISA's, Compilers, and Assembly
Introduction of microprocessor
Overview Introduction General Register Organization Stack Organization
CS149D Elements of Computer Science
Lecture 30 (based on slides by R. Bodik)
Fundamentals of Computer Organisation & Architecture
Computer Instructions
Introduction to Microprocessor Programming
Instructions in Machine Language
CPU Structure CPU must:
Lecture 4: Instruction Set Design/Pipelining
Presentation transcript:

1 Assembly Language Professor Jennifer Rexford COS 217

2 Goals of Today’s Lecture Assembly language  Between high-level language and machine code  Why learn assembly-language programming? Computer architecture  Central Processing Unit (CPU)  Fetch-decode-execute cycle C code vs. assembly code  Small IA32 example to illustrate the relationship to C  Illustrates storing, manipulating, comparing, and jumping

3 Three Levels of Languages

4 High-Level Language Make programming easier by describing operations in a natural language Increase the portability of the code One line may involve many low-level operations Examples: C, C++, Java, Pascal, … count = 0; while (n > 1) { count++; if (n & 1) n = n*3 + 1; else n = n/2; }

5 Assembly Language Tied to the specifics of the underlying machine Commands and names to make the code readable and writeable by humans Hand-coded assembly code may be more efficient E.g., IA32 from Intel movl%edx, %eax andl$1, %eax je.else jmp.endif.else:.endif: sarl$1, %edx movl%edx, %eax addl%eax, %edx addl$1, %edx addl$1, %ecx.loop: cmpl$1, %edx jle.endloop jmp.loop.endloop: movl$0, %ecx

6 Machine Language Also tied to the underlying machine What the computer sees and deals with Every command is a sequence of one or more numbers All stored in memory on the computer, and read and executed Unreadable by humans A A A 000B 000C 000D 000E 000F FE10 FACE CAFE ACED CEDE ABC DEF F00D EEEE 1111 EEEE B1B2 F1F

7 Why Learn Assembly Language? Write faster code (even in high-level language)  By understanding which high-level constructs are better  … in terms of how efficient they are at the machine level Understand how things work underneath  Learn the basic organization of the underlying machine  Learn how the computer actually runs a program  Design better computers in the future Some software is still written in assembly language  Code that really needs to run quickly  Code for embedded systems, network processors, etc.

8 Why Learn Intel IA32 Assembly? Program natively on our computing platform  Rather than using an emulator to mimic another machine Learn instruction set for the most popular platform  Most likely to work with Intel platforms in the future But, this comes at some cost in complexity  IA32 has a large and varied set of instructions  Arguably more than are really useful in practice Fortunately, you won’t need to use everything

9 Computer Architecture

10 A Typical Computer CPU ChipsetMemory I/O bus CPU... Network ROM

11 Von Neumann Architecture Central Processing Unit  Control unit –Fetch, decode, and execute  Arithmetic and logic unit –Execution of low-level operations  General-purpose registers –High-speed temporary storage  Data bus –Provide access to memory Memory  Store instructions  Store data Random Access Memory (RAM) Control Unit ALU CPU Registers Data bus

12 Control Unit: Instruction Pointer Stores the location of the next instruction  Address to use when reading from memory Changing the instruction pointer (EIP)  Increment by one to go to the next instruction  Or, load a new value to “jump” to a new location EIP

13 Control Unit: Instruction Decoder Determines what operations need to take place  Translate the machine-language instruction Control what operations are done on what data  E.g., control what data are fed to the ALU  E.g., enable the ALU to do multiplication or addition  E.g., read from a particular address in memory ALU

14 Registers Small amount of storage on the CPU  Can be accessed more quickly than main memory Instructions move in and out of registers  Loading registers from main memory  Storing registers to main memory Instructions manipulate the register contents  Registers essentially act as temporary variables  For efficient manipulation of the data Registers are the top of the memory hierarchy  Ahead of cache, main memory, disk, tape, …

15 Keeping it Simple: All 32-bit Words Simplifying assumption: all data in four-byte units  Memory is 32 bits wide  Registers are 32 bits wide In practice, can manipulate different sizes of data EAX EBX

16 C Code vs. Assembly Code

17 Example: Kinds of Instructions Storing values (in registers)  count = 0  n Arithmetic and logic operations  Increment: count++  Multiply: n * 3  Divide: n/2  Logical AND: n & 1 Checking results of comparisons  while (n > 1)  if (n & 1) Jumping  To the end of the while loop (if “n > 1”)  Back to the beginning of the loop  To the else clause (if “n & 1” is 0) count = 0; while (n > 1) { count++; if (n & 1) n = n*3 + 1; else n = n/2; }

18 Example: Variables in Registers Registers n %edx count %ecx Referring to a register: percent sign (“%”) count = 0; while (n > 1) { count++; if (n & 1) n = n*3 + 1; else n = n/2; }

19 Example: Immediate and Register Addressing count=0; while (n>1) { count++; if (n&1) n = n*3+1; else n = n/2; } movl$0, %ecx addl$1, %ecx Referring to a constant: dollar sign (“$”) Read directly from the instruction written to a register

20 Example: Immediate and Register Addressing count=0; while (n>1) { count++; if (n&1) n = n*3+1; else n = n/2; } movl%edx, %eax andl$1, %eax Computing intermediate value in register EAX

21 movl%edx, %eax addl%eax, %edx addl$1, %edx Example: Immediate and Register Addressing count=0; while (n>1) { count++; if (n&1) n = n*3+1; else n = n/2; } Adding n twice is cheaper than multiplication!

22 sarl$1, %edx Example: Immediate and Register Addressing count=0; while (n>1) { count++; if (n&1) n = n*3+1; else n = n/2; } Shifting right by 1 bit is cheaper than division!

23 Example: Changing Program Flow Cannot simply run next instruction  Check result of a previous operation  Jump to appropriate next instruction Flags register (EFLAGS)  Stores the status of operations, such as comparisons  E.g., last result was positive, negative, zero, etc. Jump instructions  Load new address in instruction pointer Example jump instructions  Jump unconditionally (e.g., “}”)  Jump if zero (e.g., “n&1”)  Jump if greater/less (e.g., “n>1”) count=0; while (n>1) { count++; if (n&1) n = n*3+1; else n = n/2; }

24 movl%edx, %eax andl$1, %eax je.else jmp.endif.else:.endif: sarl$1, %edx movl%edx, %eax addl%eax, %edx addl$1, %edx addl$1, %ecx.loop: cmpl$1, %edx jle.endloop jmp.loop.endloop: movl$0, %ecx Example: Jump and Labels count=0; while (n>1) { count++; if (n&1) n = n*3+1; else n = n/2; }

25 movl%edx, %eax andl$1, %eax je.else jmp.endif.else:.endif: sarl$1, %edx movl%edx, %eax addl%eax, %edx addl$1, %edx addl$1, %ecx.loop: cmpl$1, %edx jle.endloop jmp.loop.endloop: movl$0, %ecx Example: Jump and Labels count=0; while(n>1) { count++; if (n&1) n = n*3+1; else n = n/2; } “if” block “else” block

26 movl%edx, %eax andl$1, %eax je.else jmp.endif.else:.endif: sarl$1, %edx movl%edx, %eax addl%eax, %edx addl$1, %edx addl$1, %ecx.loop: cmpl$1, %edx jle.endloop jmp.loop.endloop: movl$0, %ecx Example: Making More Efficient?? count=0; while(n>1) { count++; if (n&1) n = n*3+1; else n = n/2; } Replace with “jmp.loop”

27 movl%edx, %eax andl$1, %eax je.else jmp.endif.else:.endif: sarl$1, %edx movl%edx, %eax addl%eax, %edx addl$1, %edx addl$1, %ecx.loop: cmpl$1, %edx jle.endloop jmp.loop.endloop: movl$0, %ecx Complete Example count=0; while (n>1) { count++; if (n&1) n = n*3+1; else n = n/2; } n %edx count %ecx

28 Reading IA32 Assembly Language Assembler directives: starting with a period (“.”)  E.g., “.section.text” to start the text section of memory  E.g., “.loop” for the address of an instruction Referring to a register: percent size (“%”)  E.g., “%ecx” or “%eip” Referring to a constant: dollar sign (“$”)  E.g., “$1” for the number 1 Storing result: typically in the second argument  E.g. “addl $1, %ecx” increments register ECX  E.g., “movl %edx, %eax” moves EDX to EAX Comment: pound sign (“#”)  E.g., “# Purpose: Convert lower to upper case”

29 Designing an Instruction Set

30 How Many Instructions to Have? Need a certain minimum set of functionality  Must to be able to represent any computation that can be expressed in a higher-level language Benefits of having many instructions  Direct implementation of many key operations  Represent a line of C in one (or a few) lines of assembly Disadvantages of having many instructions  Larger opcode size  More complex logic to implement complex instructions  Hard to write compilers to exploit all of the instructions  Hard to optimize the implementation of the CPU

31 CISC vs. RISC Complex Instruction Set Computer (old fashioned, 1970s style) Examples: Vax ( ) Motorola ( ) 8086/80x86/Pentium ( ) Instructions of various lengths, designed to economize on memory (size of instructions) Reduced Instruction Set Computer (“modern”, 1980s style) Examples: MIPS (1985-?) Sparc ( ) IBM PowerPC (1990-?) ARM Instructions all the same size and all the same format, designed to economize on decoding complexity (and time, and power drain) IA32 is a CISC architecture

32 Next Time: More on Assembly Language Machine code  Encoding the operation and the operands  Simpler MIPS instruction set as an example Greater detail on IA32 assembly language  Different sizes of data (e.g., byte, word, and extended)  IA32 instructions and addressing modes Portions of memory  Text, Data, BSS, Heap, and Stack Calling functions  Pushing and popping from the stack  Arguments to a function and local variables  Returning back to the calling function