'if' und 'else' im assembler?

Gast #151312
Hallo an Alle,

bin noch ziemlicher Neuling und habe "IF und ELSE" im Assembler
entdeckt. Mit diesen wollte ich dan auch gleich mal ausprobieren, ob
ich mit einm Schalter an PortD0 die LEDs an PortB2 und PortB3
umschalten kann.Leider funktioniert dies im nachfolgenden Code nicht.
Der Debugger zeigt mir zwar die 1 (in R16, bzw. PortD,1) an, das if
interressiert das aber nicht die Bohne.Wenn mir jemand meinen
Denkfehler aufzeigen kann wäre ich ihm sehr verbunden. Auch würde ich
gerne etwas mehr über diese Art der Assemblerprogrammierung erfahren,
aber wo? Dank schon mal im voraus.

Gruß
;***************************************
.include "m16def.inc"

.def  Temp     =r16    ;Temp Register

;Ausgabeport ist PORTB

ser  Temp
out  DDRb, Temp
com  Temp
out DDRD, Temp

main:

in temp,portd

#if temp==1

    sbi  portb,2
#else
    sbi  portb,3

#endif

end:
  rjmp main
Das sind doch nur Statements für die bedingte Assemblierung.
D.h. man kann damit nur Ausdrücke tesetn, die zur Assemblezeit bereits
bekannt ist.
Daher sollte er eigentlich meckern, wenn Du versuchst ein Register zu
testen.

Deine ifs must Du also selber mit CPI, BRNE usw. zusammenbasteln.


Peter
Gast
Hallo Peter,

folgende Code ist direkt von ATMEL geschrieben.
Die übergebenen Argumente sind doch zu Assemblierungszeit auch noch
nicht bekannt, oder?
Nein, der Assembler hat keinen Fehler angezeigt beim letzten Code.

Gruß


.MACRO SETB     ;Arguments: Address, Bit, Register
  #if @1>7
    #error "Only values 0-7 allowed for Bit parameter"
  #endif
  #if  @0>0x3F
    lds  @2, @0
    sbr  @2, (1<<@1)
    sts  @0, @2
  #else
    #if @0>0x1F
      in  @2, @0
      sbr  @2, (1<<@1)
      out  @0, @2
    #else
      sbi  @0, @1
    #endif
  #endif
.ENDMACRO
Gast
doch, die werte sind bekannt - das sind die parameter die man dem makro
übergibt und die, die in den if's verwendet werden müssen(!)
konstanten sein.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 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.