Forum: Mikrocontroller und Digitale Elektronik Assembler: Bedingung A und Bedingung B, dann nicht


von Karl-alfred R. (karl-alfred_roemer)


Lesenswert?

Wenn der 16-Bit-Zeiger im Mega8 NULL ist,
dann (und nur dann) soll etwas NICHT getan werden ?

Habe es derzeit so gemacht:

cpi ZL, 0
brne weiter
cpi ZH, 0
breq Ende
weiter:
rcall AuszuführendeRoutine
Ende:

Man sehr muss aufpassen,dass man das brne und das breq
nicht vertauscht. Und dann noch Zwei Labels, die sich
auch noch überschneiden!!! Geht das nicht auch einfacher?

von Herr M. (herrmueller)


Lesenswert?

Nichts leichter als das, sagte Frederick zu Piggeldy:

adiw Z,0
breq weiter
rcall AuszuführendeRoutine
weiter:


zu Z (word) wird 0 addiert. Wenns 0 war bleibts 0 , ansonsten bleibt es 
was es vorher war.

von Karl-alfred R. (karl-alfred_roemer)


Lesenswert?

Wow, da muss man erst mal drauf kommen!

Dass so etwas Unsinniges, wie Null zu einer Zahl zu addieren
indirekt die Information gibt, dass die ursprüngliche Zahl
Null war. Aber jetzt, wo ich es sehe, ist es sonnenklar.
Falls Z Null ist, dann setzt adiw Z,0 das Zeroflag was
dann von breq erkannt wird. Genial!  Danke:)))

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.