Compilerbau WiSe 2002/03

Übungsblatt 10

Aufgabe 1

Betrachten Sie das Programm
program check = 
begin
  var a: real;
  proc doit(a: real) 
  begin
    a := 1.2;
    out (a);
  end;
  proc twice(p: proc, val: real)
  begin
    p(val);
    out(val);
  done;
  a := 2.2;
  doit(a);
  out(a);
  twice(doit,a);
  out(a);
end.  
      
Was wird im Falle von call by name, call by reference und call by value jeweils ausgegeben? Erläutern Sie die jeweilige Semantik.
Welcher Code wird für die Funktionsaufrufe doit(a) und p(val) erzeugt, und woher stammen die im Code abgelegten Informationen?

Aufgabe 2

Bei der Speicherbelegung
Adr. Wert Subst.-Bit
01
13
22
34
451
571
66
78
89
...
und einer Indexregisterbelegung von IR1=5, IR2=3, IR3=7
  1. Was steht nach der Ausführung von LDA,I 3 im Akkumulator?
  2. Was steht nach der Ausführung von LDA,I 4 im Akkumulator?
  3. Was steht nach der Ausführung von LDA,I 2,2 im Akkumulator?
Können Sie mit Indexregistern den Arrayzugriff optimieren?


Dietmar Lammers
Last modified: Fri Jan 23 14:54:32 CET 2004