PROGRAM MODELLRECHNER(INPUT,OUTPUT); CONST MAX=200,KAP=200; TYPE STRING=ARRAY[1..3] OF CHAR; REGISTER=ARRAY[1..12] OF INTEGER; BEFEHLSTYPE=RECORD OPERATION:STRING; ADRESSE:INTEGER END; HIRN=ARRAY[1..MAX] OF INTEGER; VAR EINGABEREGISTER,AUSGABEREGISTER:REGISTER; PROGRAMMSPEICHER:ARRAY[1..KAP] OF BEFEHLSTYPE; DATENSPEICHER:HIRN; BEFEHLSZAEHLER,AC:INTEGER; BEFEHLSREGISTER:BEFEHLSTYPE; LAD,SPD,AUD,SET,ADD,MLT,KPL,UND,ODR, STP,VLL,VLR,SPR,SGN,SAM:STRING; PROCEDURE LADEAC(A:INTEGER); BEGIN AC:=DATENSPEICHER[A] END; PROCEDURE SPEICHEREAUSAC(A:INTEGER); BEGIN DATENSPEICHER[A]:=AC END; PROCEDURE BELEGEAC(A:INTEGER); BEGIN AC:=A END; PROCEDURE ADDIERE(A:INTEGER); BEGIN AC:=AC+DATENSPEICHER[A] END; PROCEDURE KOMPLEMENTIERE; BEGIN AC:=-AC END; PROCEDURE DIREKTSPRUNG(A:INTEGER); BEGIN BEFEHLSZAEHLER:=A END; PROCEDURE NULLSPRUNG(A:INTEGER); BEGIN IF AC=0 THEN BEFEHLSZAEHLER:=A END; PROCEDURE NEGATIVSPRUNG(A:INTEGER); BEGIN IF AC<0 THEN BEFEHLSZAEHLER:=A END; PROCEDURE DATENEINGABE; VAR I:INTEGER; BEGIN I:=0; REPEAT READ(DATENSPEICHER[I]); I:=I+1 UNTIL (I-1=MAX) OR EOF END; BEGIN(*HAUPTPROGRAMM*) LAD[1]:="L";LAD[2]:="A";LAD[3]:="D"; AUD[1]:="A";AUD[2]:="U";AUD[3]:="D"; SPD[1]:="S";SPD[2]:="P";SPD[3]:="D"; SET[1]:="S";SET[2]:="E";SET[3]:="T"; ADD[1]:="A";ADD[2]:="D";ADD[3]:="D"; PROCEDURE PROGRAMMEINGABE; VAR Z,I:INTEGER;ABBRUCH:BOOLEAN; BEGIN I:=0;ABBRUCH:=FALSE; REPEAT FOR Z:=1 TO 3 DO BEGIN READ(PROGRAMMSPEICHER[I].OPERATION[Z]); IF (PROGRAMMSPEICHER[I]=OPERATION[Z]) THEN BEGIN Z:=3;ABBRUCH:=TRUE END END; IF NOT ABBRUCH THEN BEGIN READLN(PROGRAMMSPEICHER[I].ADRESSE); I:=I+1 END UNTIL (I-1=KAP) OR ABBRUCH END; PROCEDURE DUALNACHDEZIMAL(VAR DUAL:REGISTER;DEZIMAL:INTEGER); VAR I:INTEGER; BEGIN DEZIMAL:=DUAL[10]; FOR I:=9 DOWNTO 0 DO BEGIN DEZIMAL:=DEZIMAL*2+DUAL[I]; DEZIMAL:=DEZIMAL-DUAL[11]*2048 END END; PROCEDURE DEZIMALNACHDUAL(VAR DUAL:REGISTER;DEZIMAL:INTEGER);