Assembler , wer hilft mir weiter

Gast #57043
Hallo Leute,

wer kann mir bei unterem Programmcode weiterhelfen.
Ich will die 16Bit Zahl in R28:R29 überprüfen ob sie
zwischen -250 und + 250 liegt.
Liegt sie ausserhalb dieser Werte muss PortB.4 auf 0 gesetzt werden.
Eigendlich funzt der Code biem simulieren , jedoch in der Steuerung
noch nicht zuverlässig.

Gruss Gerhard


LDI R20,250      'lade DEZ 250 in r16
LDI R21,0        'lade DEZ 0 in r17
CP R20,R28       'Vergleiche untere Bytes
CPC R21,R29      'Vergleiche obere Bytes
brcc weiter      'wenn Carry 0 ist dann springe zu weiter
brpl weiter      'wenn zahl positiv ist dann springe auf weiter
CBI PortB,4      'Portb.4 = 0
Weiter:
LDI R20,5        'lade DEZ 5 in r20
LDI R21,255      'lade DEZ 0 in r21
CP R20,R28       'Vergleiche untere Bytes
CPC R21,R29      'Vergleiche obere Bytes
brcs ende        'wenn Carry 1 ist dann springe zu ende
brmi ende        'wenn zahl positiv ist dann springe auf ende
CBI PortB,4      'Portb.4 = 0
Ende:
Gast #57044
mach das ganze mal mit

cpi [register],0x??

vergleich mit konstanten

und dann nach jedem vergeich einen bedingten sprung setzten. dann
sollte es gehen.
Gast #57046
Elektron meint vermutlich, dass Du Dir die Kopieraktion in die Register
20/21 sparen kannst, weil man Register 28/29 mit dem CPI-Befehl direkt
gegen eine Konstante testen kann.

Den 16 Bit Wert vergleichst Du byteweise, so wie Du es auch schon
versucht hast.

Gruß, Frank
Gast #57047
Hi!
Habe dein Prog zwar nicht vollständig durchdacht, aber eigentlich ist
es der richtige Weg. In deinem Falle würde ich allerdings kürzer
schreiben:

      TST R28      'higbyte = 0?
      brne min     'nein-> minus?
      cpi R29,251  '250 + 1 für C-Flag
      brcs Ende    'solange C=1 alles ok -> Ende
      rjmp aus     'sonst löschen
min:  cpi R28,255  'higbyte max -250?
      brne aus     'nein also löschen
      cpi R29,5    '>= -250?
      brcc Ende    'ok ->Ende
aus:  cbi PortB,4
Ende:

Ich hoffe es stimmt (amkopfkratz) habe es nicht getestet

MFG Uwe

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.