IF Anweisung umsetzen ... ??

01/02/2009 - 14:05 von Jens Kallup | Report spam
Hallo Nachrichtenbrett,

ich bastle ja an einen Compiler ...
jetzt bin ich gerade an den Punkt gekommen, an dem die
IF .. ELSE .. ENDIF Anweisung implementiert werden
soll ...
wie kann ich also zum Beispiel:

IF var1 = var2 + var3
print "test OK"
ELSE
print "test NO"
ENDIF

oder <>, <=, >=, !in Assembler umwandeln?

Gruß
Jens
 

Lesen sie die antworten

#1 Dirk Wolfgang Glomp
01/02/2009 - 15:34 | Warnen spam
Am Sun, 1 Feb 2009 14:05:15 +0100 schrieb Jens Kallup:

Hallo Nachrichtenbrett,

ich bastle ja an einen Compiler ...
jetzt bin ich gerade an den Punkt gekommen, an dem die
IF .. ELSE .. ENDIF Anweisung implementiert werden



Es gibt Vergleichsbefehle mit dem man Werte(Zeichen) vergleichen kann.
Das Resultat wird in den Flags (sieghe Flagregister) signalisiert.
Mit entsprechenden Verzweigungbefehlen(conditional jumps) kann man
nun in Abhàngigkeit dieser Flags den Progammablauf verzweigen lassen.

Ein Vergleich wird beispielsweise über zwei Registerinhalte(siehe
Allzweckregister) vorgenommen...
"cmp eax,ebx"
..und mit einem darauf bezogenen bedingten Verzweigung entweder
zu der dort angegebenen Adresse gesprungen, oder der Programmablauf
auf den nachfolgenden Befehl gesetzt ohne zu springen:
"jb AdresseX"
...nachfolgender Befehl...

soll ...
wie kann ich also zum Beispiel:

IF var1 = var2 + var3



Addition, Abfrage, Verzweigung

; Wir beginnen mal damit Werte in Register zu laden.
Wert13
Wert2E6
WertYx9

mov eax,Wert1
mov ebx,Wert2

AdresseP: ; Dies ist eine Sprungmarke

; Nun erfolgt eine Integer-Addition:

add eax,ebx

; Jetzt schauen wir mal ob der Wert in eax schon größer ist als "WertY"

cmp eax,WertY

; ...und verzweigen wenn es noch nicht so ist:

jb AdresseP

print "test OK"



Letztendlich soll wohl dieser Text am Bildschirm in B8000
zu lesen sein, habe ich recht?

Dafür gibt es verschiedene Möglichkeiten.

ELSE
print "test NO"
ENDIF

oder <>, <=, >=, !> in Assembler umwandeln?



Die verschiedenen Flags im Flagregister ermöglichen es mit den bedingten
Sprüngen den Programmfluß zu steuern und so in Ahàngigkeit der vorherigen
Vergleichsabfrage die Werte zu unterscheiden und darauf entsprechend
zu reagieren.

Dirk

Ähnliche fragen