bedingter Sprung

Gast #274298
Lesenswert?

Hallo,

hätte eine Frage zu bedingten Sprungbefehlen.
Ich möchte 2 Zahlen miteinander vergleichen und nur wenn die eine Zahl
größer ist wie die andere, dann soll der Sprung ausgeführt werden,
ansonsten wird das Programm weiter abgearbeitet. Ist die in Assembler
überhaupt möglich?

z.B.:
4>3? --> Ja, Sprung an eine andere Stelle
2>3? --> Nein, Programm wird weiter abgearbeitet
Gast #274299
Lesenswert?

Falls du das mit einem AVR machen willst gibt es gleich ein paar
Möglichkeiten, es spielt auch eine Rolle ob es vorzeichenlose Zahlen
sind oder nicht:

BRGE
BRLO
BRLT
BRSH

Näheres verrät dir der instruction set des jeweiligen AVR

Gurss
Gast #274300
Lesenswert?

Es ist ein Atmel-Controller...Programmiert wird über das Atmel-Tool
Flip...

Genauer gesagt, möchte ich vergleichen ob die Zahl im Akku größer oder
gleich 10 ist bzw. anders herum geht es auch, ob die Zahl im Akku
kleiner gleich 9 ist.
#274301
Lesenswert?

Was ist denn ein Atmel-Controller?

Atmel produziert eine breite Palette verschiedener Controllerfamilien,
unter Anderem, 8051er (At89xx), AVRs (AT90xx), ARM (AT91xx)...

Wenn du also konkrete Hilfe haben willst, dann nenne das Teil beim
korrekten Namen, so dass keine Missverständnisse möglich sind.

...
Gast #274305
Lesenswert?

Mal so aus dem Ärmel geschüttelt:
Prüfen auf Gleichheit: CNJE oder alternativ eine Zahl von der anderen
Subtrahieren und wenn Zero rauskommt, mit JZ springen.

Zum prüfen auf größer oder kleiner:
Carry - Flag setzen
Eine Zahl von der anderen Abziehen unter Berücksichtigung des Carry
Flags. Wenn das Carryflag nach der Operation verschwindet, war die
erste Zahl größer als die andere (Sprung mit JNC). Wenn das Carryflag
noch vorhanden ist, war die zweite Zahl größer als die erste (Sprung
mit JC)

Klingt kompliziert, sind aber nur zwei oder drei Befehle
hintereinander....
Gast #274306
Lesenswert?

Habe es mittlweile so gelöst:


Subtraktion:

  subb A, #0Ah  ;vom Akku wird 10 abgezogen
  jnc Subtraktion ;Sprung an Label Subtraktion, wenn Carry-Bit 0 ist
  add A, #0Ah  ;10 wieder hinzuaddieren um die letzte positive
Einer-Stelle zu erhalten
  add A, #30h  ;hinzuaddieren der Zahl 0 im Hex-Code um richtige
Hex-Zahl zu erzeugen
  mov R3, A    ;Inhalt vom Akku in R3 kopieren (Einer-Stelle)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren