Not logged in. · Lost password · Register

Yves
Code artist
(Administrator)
Avatar
Member since Nov 2002
3282 posts
Subject: Klausur 07/2003
Aufgabe 4: Programmtransformation

Also ich bin bis jetzt auf sowas gekommen:
  1.     i = 0;
  2. l1:
  3.     if (i >= 10) goto n1
  4.  
  5.     v1 = i < 5;
  6.     v2a = a[i];
  7.     v2a += 10;
  8.     v2 = v2a < i;
  9.     v3 = i >= y;
  10.     v4 = v2 || v3;
  11.    
  12.     if (v1 && v4) goto n1;
  13.  
  14.     if (i >= 5) goto c1;
  15. c1r:
  16.     i++;
  17.     goto l1;
  18.    
  19. c1:
  20.     v1 = b;
  21.     v1 += c;
  22.     v1 *= a[i];
  23.     v1 /= d;
  24.     y += v1;
  25.     goto c1r;
  26.  
  27. n1:

Aber die Vergleichsoperationen (Zeile 5-10) am Anfang konnte ich noch nicht auflösen in irgendwas Assembler-ähnliches für Ein-Adress-Maschinen. Jemand ne Idee?
Physikalisch gesehen ist ein Quantensprung die kleinstmögliche Zustandsänderung, meist von einem höheren auf ein niedrigeres Niveau.

Komprenu Energiemonitoring-Software | dotforward Webhosting
Yves
Code artist
(Administrator)
Avatar
Member since Nov 2002
3282 posts
Aufgabe 5: Stack

Das ist ja nun ziemlicher Unsinn in der Aufgabenstellung. Also "subl $x - func, %eax" ist für mich kein Assembler-Quelltext. Was soll dieses geniale Programm jenseits meines Verständnishorizonts also eigentlich tun?
Physikalisch gesehen ist ein Quantensprung die kleinstmögliche Zustandsänderung, meist von einem höheren auf ein niedrigeres Niveau.

Komprenu Energiemonitoring-Software | dotforward Webhosting
Max
Member since Oct 2002
1296 posts
segfaulten *g*

keine ahnung, ich frag spaeter mal nach...
BLUBB
leonidas
Avatar
Member since May 2003
298 posts
In reply to post #2
Also “subl $x - func, %eax” ist für mich kein Assembler-Quelltext.

Falls du damit sagen willst, dass du dieses Konstrukt nicht direkt in einen Opcode umwandeln kannst... da hast du recht. In der Tat handelt es sich aber bei x und func um zwei adressen (->Sprungmarken), und beim assemblieren werden daraus Konstanten, und die kann der Assembler gleich voneinander abziehen, so dass am Ende ein ganz "normaler" Opcode mit 2 Operanden herauskommt (nämlich eax und das Ergebnis von x-func).
Noch genauer stehts in dem anderen 7/2003 Thread...
Nothing's real until you feel
Yves
Code artist
(Administrator)
Avatar
Member since Nov 2002
3282 posts
Oh, hm, OK. hatte ganz vergessen, dass vom letzten Semester/dem davor ja auch noch Themen da sind... ;)
Physikalisch gesehen ist ein Quantensprung die kleinstmögliche Zustandsänderung, meist von einem höheren auf ein niedrigeres Niveau.

Komprenu Energiemonitoring-Software | dotforward Webhosting
Silent_Wa
Avatar
Member since Oct 2002
298 posts
Subject: Aufgabe 1
Ist folgendes richtig?

1a) adressierbarer Speicher ist 2^16 * 16 = 1048576 Bit = 131072 Byte = 128kByte
1b) Speicherverbrauch Little-Endian = Big-Endian
1c) manchmal mehr, da kleinere Variablen, z.B. Short-Int mit 2 Byte zu 4 Byte aufgefüllt werden
1d) 1024 Strukturen (4+4+4+20 = 32 Byte pro Struktur)
Silent_Wa
Avatar
Member since Oct 2002
298 posts
In reply to post #2
Quote by Yves:
Aufgabe 5: Stack

Das ist ja nun ziemlicher Unsinn in der Aufgabenstellung. Also "subl $x - func, %eax" ist für mich kein Assembler-Quelltext. Was soll dieses geniale Programm jenseits meines Verständnishorizonts also eigentlich tun?

Ich hätte gedacht, dass in %eax am Schluss dann func steht, denn
func:
   ...
   call x   /* aufm Stack Rücksprungadresse ablegen */
x:
   popl %eax   /* Rücksprungadresse vom Stack holen und in %eax ablegen */
   subl $x - func, %eax   /* von %eax $x abziegen und func addieren */
Die letzte Zeile ist etwas seltsam, und folgendes hab ich mir überlegt:
Auf %eax liegt die Rücksprungadresse, also x. Von der soll man ($x - func) abziehen, aufgelöst - $x + func. ergibt IMHO func.

Kann das jemand bestätigen / widerlegen?  :-)
Hanswurscht
Avatar
Member since Nov 2002
192 posts
ja genau das hattich auch
Have a chillin`day.  
Frank
Avatar
Member since Nov 2002
164 posts
func hatte ich auch.

Weil ich es grad schon mal geschrieben hatte hier meine aufgabe 3b:

max:
            movl 4(%esp),%edx        // N einlesen
            movl $0, %ecx                  // counter variable ecx
            movl 8(%esp), %eax     //erstes dingens einlesen
            jmp loop
next:
           cmp 8(%esp,%ecx,4), %eax    //if nachstes dings <= bisher grösstes
           jle loop                                             // weitersuchen
           movl 8(%esp,%ecx,4), %eax     //sonst  nächstes dings gleich neues dings
           jmp loop                                //weiter
loop:
           addl $1, %ecx               // Counter++
           cmp  %ecx,%edx         // If counter < N -> next
           jl      next
end:
         ret            // !!! ENDE!!!

Ja, Assembler ist unleserlich wenn man es nicht selber geschrieben hat
 :-/
Segmentation fault
Yves
Code artist
(Administrator)
Avatar
Member since Nov 2002
3282 posts
Quote by Frank:
Ja, Assembler ist unleserlich wenn man es nicht selber geschrieben hat

Ein C-Programm ist genauso unübersichtlich wie Assembler, wenn es nur groß genug wird. Sagen wir, ein Betriebssystem.
Physikalisch gesehen ist ein Quantensprung die kleinstmögliche Zustandsänderung, meist von einem höheren auf ein niedrigeres Niveau.

Komprenu Energiemonitoring-Software | dotforward Webhosting
Frank
Avatar
Member since Nov 2002
164 posts
Ja.
Segmentation fault
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