Not logged in. · Lost password · Register

swarsron
Avatar
Member since Nov 2002
178 posts
Subject: Klausur 701
1a, Performancekritische Teile
    Betriebssystemprogrammierung
    Speicherkritische Anwendungen
  b, Byte=8Bit
    Maschinenwort=Datum mit der Breite des Datenbusses
    Addresse=Ortsangabe eines Maschinenwortes
  c, 2**N Byte
  d, Hoehere Uebertragungsrate
    Mehr Speicher addressierbar
    Nachteile: Verschwendung bei Zugriff auf kleine Daten
        Addressierung evtl. aufwendiger

    So wirkliche Nachteile fallen mir nicht ein, abgesehen von der steigenden Komplexitaet der Hardware

  e, 1024
  f, Allignment auf 12

2a, Skript und 202
  b, movl a, %eax
    addl a, %eax
    movl %eax, a
    ergibt shll $1, a
  c, Keine Ahnung, waere super wenn da jemand ne Idee hat

3,
        .equ x 8
        .equ res -4
    fibo:    pushl %ebp
        movl %esp, %ebp
        subl $4, %esp
        movl x(%ebp), %eax
        cmpl $1, %eax
        jg else
        movl $1, %eax
        jmp end
    else:    decl %eax
        pushl %eax
        call fibo
        movl %eax, res(%ebp)
        movl x(%ebp), %eax
        subl $2, %eax
        pushl %eax
        call fibo
        addl res(%ebp), %eax
    end:    movl %ebp, %esp
        popl %ebp
        ret

4a, Programme, die keine tiefe Aufrufstruktur haben (<=1) laufen, bei mehr Abstiegen ist keine Rueckkehr mehr moeglich
 b, Schnell, keine verschachtelten Funktionsaufrufe (z.B. Rekursion) moeglich
 c, Da sind wir uns wieder nicht sicher. Ist damit gemeint, dass unterschiedlicher Code fuer sin(x) erzeugt werden muss oder dass das sichtbare Codestueck fuer "sin(x)" und "y=sin(x)" verschieden sein muss. Im ersten Fall nein, im zweiten ja
 d, Zuwenig: Zugriff auf falsche Daten
    Zuviell: davor zuviel gepusht: kein Unterschied
        danach zuviel gepush: Zugriff auf falsche Daten
5a & b, siehe 702

6, c1=(y1 und x1) oder (y1 und c0) oder (x1 und c0) =
    =(y1 und x1) oder (y1 und y0 und x0) oder (x1 und x0 und y0)
http://happytreefriends.com/watch_episodes/index.html
"Cartoon Violence: Not recommended for small children and big babies"
This post was edited on 2003-09-27, 17:30 by swarsron.
Tuttl
Avatar
Member since Sep 2003
170 posts
zu 2d siehe Skript ´Seite 196!
Steppenwolf
Schläfer
Avatar
Member since Nov 2002
1535 posts
Quote by Tuttl:
zu 2d siehe Skript ´Seite 196!

hmm, da ist leider nur die frage, der rest ist leer :] (bei mir). ich schau mal, ob das bei den loesungen dabei ist, die du gepostet hast, koenntest du ansonsten nochmal eine extrawurst fuer mich anfertigen?
Tuttl
Avatar
Member since Sep 2003
170 posts
Zu 2c:
-Entweder  mit sukzessiver Div von 2:
    xor %ecx, ecx
loop:     cmpl $2 , %eax
    jl done
    subl $2 , %eax
    incl %ecx
    jmp loop

done:    movl %ecx , result

Also so ungeführ müsst die gehen

-Oder man ersetzt rechtsshift durch sieben Linksshifts (kann man drch Addition wiederum ersetzen), anschließend inc if carry Bit.AmEnde dann mit einer maske verunden (andl $0*7fff ffff).
LÖsung dazu  aus fau-informatik-2001.de
       movb $7, %cl
_loop:addl %eax, %eax
       jnc _noinc
       incl %eax
_noinc:decb %cl
       jnz _loop
       andl $0x7fffffff, %eax

zu 1d:
Vorteil Adressbusse:Anzahl direkt addressierbarer Speicherzellen wächst exponentiell.(pro Bit eine Verdopplung des Speichers)
Vorteil Datenbusse:Mehr Informationen können gleichzeitg aus Speicher geholt bzw geschrieben werden=> höhere Performance

Nachteil:Zu breite Busse nur noch teuer bringen aber keine Verbesserung mehr!
-mit 128 Adressbussen könnte man jedes Atom im Weltall adressieren (unnutzbar)
-größte zu verarbeitende Daten sind 64 Bit (Double-Bit)

 ;-)
snehls
Superfreund aka Der Schwede
Avatar
Member since Oct 2002
750 posts
Zur 3:
der gcc erzeugt für die else funktion folgenden Code
    subl    $12, %esp
    movl    8(%ebp), %eax
    decl    %eax
    pushl    %eax
    call    fibo
    addl    $16, %esp
    movl    %eax, %ebx
    subl    $12, %esp
    movl    8(%ebp), %eax
    subl    $2, %eax
    pushl    %eax
    call    fibo
    addl    $16, %esp
    leal    (%eax,%ebx), %eax
    movl    %eax, -8(%ebp)
der rest ist weitgehend so wie in der Lösung hier, kann mir jemand erklären was "leal    (%eax,%ebx), %eax" macht und wie das die Addition der beiden Funktionsergebnisse ersetzt oder überles ich da irgendwas?
"I will speculate that today’s single-threaded applications as actually used in the field could actually see a performance boost for most users by going to a dual-core chip, not because the extra core is actually doing anything useful, but because it is running the adware and spyware that infest many users’ systems and are otherwise slowing down the single CPU that user has today."
fredator
Ca$h Carlo$
Avatar
Member since Mar 2003
953 posts
leal (%eax,%ebx), %eax :

des leal macht nicht viel, ausser eine Konstante die allerdings wie eine Speicheradresse aussieht in das Register zu schieben ....

Also:
Interpretiere (%eax,%ebx) als Speicheradresse;
Berechne also die effektive Adresse (weiss allerdings nicht, welcher Scaling Faktor benutzt wird, wenn man ihn weglaesst)
Die berechnete Adresse interpretierst du als Konstante $Adresse und schiebst se nach %eax
1.Sys: ZX Spectrum +2, 128K RAM, 0MB HD, Kassettendeck, RS232 Interface
2.Sys: Nintendo GameBoyAdvance SP, Metallicblau, 32bit CPU, Sound, Video/Mucke/NES Player
3.Sys: Sega Dreamcast, 128Bit, 2Mem Cards, 10+Spiele, SNES emulator, 2 (!) Controller
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen