1 / 9

Assembly Language

Assembly Language. .text .globl fact .type fact, @function fact: pushl %ebp movl %esp, %ebp subl $4, %esp movl $1, -4(%ebp) .L2: cmpl $0, 8(%ebp) jg .L4 jmp .L3 .L4:

fnathan
Télécharger la présentation

Assembly Language

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Assembly Language .text .globl fact .type fact, @function fact: pushl %ebp movl %esp, %ebp subl $4, %esp movl $1, -4(%ebp) .L2: cmpl $0, 8(%ebp) jg .L4 jmp .L3 .L4: movl -4(%ebp), %eax imull 8(%ebp), %eax movl %eax, -4(%ebp) leal -4(%ebp), %eax decl (%eax) jmp .L2 .L3: movl -4(%ebp), %eax leave ret .size fact, .-fact • Specific to each machine • Extremely low level • Somewhat cryptic

  2. FortranJohn Backus, 1957 READ INPUT TAPE 5, 501, IA, IB, IC 501 FORMAT (3I5) IF (IA) 777, 777, 701 701 IF (IB) 777, 777, 702 702 IF (IC) 777, 777, 703 703 IF (IA+IB-IC) 777,777,704 704 IF (IA+IC-IB) 777,777,705 705 IF (IB+IC-IA) 777,777,799 777 STOP 1 799 S = FLOATF (IA + IB + IC) / 2.0 AREA = SQRT( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) * + (S - FLOATF(IC))) WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA 601 FORMAT (4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2, + 13H SQUARE UNITS) STOP END • Compound expressions • Statements • Compilation

  3. LispJohn McCarthy, 1958 (defun length (lst) (if (null? lst) 0 (+ 1 (length lst)))) (defun append (lst1 lst2) (if (null? lst1) lst2 (cons (car lst1) (append (cdr lst1) lst2)))) • Interpreted • Dynamically typed • Lists • Heap-based memory allocation • Garbage collection

  4. Algol 60International Committee, 1960 procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; begin integer p, q; y := 0; i := k := 1; for p:=1 step 1 until n do for q:=1 step 1 until m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q end end Absmax • Block structured procedures • Familiar control structures • Arrays and records • Statically typed

  5. SimulaOle-Johan Dahl & Kristen Nygaard, 1967 Begin Class Glyph; Virtual: Procedure print Is Procedure print;; Begin End; Glyph Class Line (elements); Ref (Glyph) Array elements; Begin Procedure print; Begin Integer i; For i:= 1 Step 1 Until UpperBound (elements, 1) Do elements (i).print; OutImage; End; End; • Classes, objects, inheritance • Garbage collection • Extension of Algol 60

  6. CDennis Richie, 1972 factorial (n) { res = 1; while (n > 0) { res *= n; n –= 1; } return res; } • Terse (and by now familiar) syntax • Low-level access to machine resources • Minimal (and unsafe) static typing • Mixed stack/heap memory model • Pointers

  7. C++Bjarne Stroustrup, 1979 class Bird { public: virtual void outputName() { cout << "a bird"; } virtual ~Bird() {} }; class Swan: public Bird { public: void outputName() { cout << "a swan"; } }; • “C with classes” • Classes and inheritance as in Simula • Pointers, unsafe static types, memory • model, low-level access as in C

  8. JavaSun Microsystems, 1995 public class Hello extends GenericServlet { public void service (ServletRequest request,ServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); final PrintWriter pw = response.getWriter(); pw.println("Hello, world!"); pw.close(); } } • Syntax borrowed from C and C++ • Inheritance borrowed from Simula and Smalltalk • Memory model borrowed from Lisp • Safe mixture of static/dynamic type systems • Platform independence via byte code interpreter

  9. C#Microsoft, 2002 using System; class Calendar { static int GetYearFromUser () { int year = 1900; while (true) { Console.Write("Which year? "); year = Int32.Parse(Console.ReadLine()); if (year >= 1900) return year; Console.WriteLine("The year must be at least 1900."); } } } • Approach borrowed wholesale from Java • “A better Java”? • Integrated into the .net framework

More Related