-
-
if in Assembler???
Hallo, ich hab da mal ne Frage…
Ich hab folgenden Code in einem Assembler Listing im Internet gefunden.
if ADC_Wert << 39
BSF PORTB, 0
else
BCF PORTB, 0
endif
Hab das mal ausprobieren wollen, da ich das bis jetzt so noch nie gesehen hab.
MPASM meckert auch nicht und Wandelt das in eine Hex um aber es tut sich nichts.
Kann jemand was damit anfangen?
Ich verstehe das so:
Wenn der Wert von Reg. "ADC_Wert" kleiner als 39 dann PB,0 setzen ansonsten löschen.
ODER?
Geht das überhaupt in einem Assembler Code? Wie gesagt, MPASM lässt es mit sich machen.
Danke für Eure Antworten im Voraus!
Gruß
-
Neuer Benutzer
Öfters hier
<< ist ne Bitverschiebung: 39 in Binär ist 00100111 und wird zu 01001110 (oder?)
kann dir auch nicht gerade sagen, was das soll...
für "kleiner als" müsstest du < verwenden
-
Erfahrener Benutzer
Roboter Genie
das if / endif bezieht sich auch nicht auf eine if-fallunterscheidung sondern ist ein conditional assembly, dh wenn die bedingung erfüllt ist wird der code erst assembliert und ins hex file eingebunden. zumindest wenns eine assembler direktive ist. so kann man einen modularen code machen um zb software für verschieden hardwareversionen zu schreiben. welche sprache und compiler wurd denn ursprünglich für diesen code genommen?
-
Erfahrener Benutzer
Roboter Experte
Wenn du ein if in Assembler umsetzen willst, musst du das mit bedingten Sprüngen machen. Du musst erst die Bedingung prüfen (und das Ergebnis in ein Bit schreiben) und dann abhängig vom Ergebnis einen Befehl überspringen (BTFSC/BTFSS).
MfG
Stefan
-
Danke erstmal für die Antworten!
@ stegr
Also wie man das normalerweise in Assembler macht, ist mir klar.
BTFSC F,x
goto X
…
Oder eine Subtraktion durchführen und des Z Bit testen.
Ich wollte eigentlich nur wissen was es mit dem if auf sich hat.
@ the_Ghost666
Ich denke als Compiler wurde MPASM genommen.Der Rest war auch in Assembler geschrieben. Ich hab das mal aus dem Internet geladen um es mir in Ruhe anzuschauen aber woher kann ich dir jetzt auch nicht mehr sagen.
Meinst also das diese stelle nur dann vom Compiler beachtet wird wenn bestimmte Bedingungen vorher erfüllt wurden. Ist also kein Assembler Code sondern, spricht den Compiler direkt an?! oder so?
hmmmm…
Gruß David
-
Erfahrener Benutzer
Roboter Genie
schau mal in die dokumentation von MPASM, dort müsste dazu was stehen, ebenso wenn du ein .inc file auf machst.
IFNDEF __16F648A
MESSG "Processor-header file mismatch. Verify selected processor."
ENDIF
wo ich mir jetzt nicht sicher bin, ist, dass es ein ifndef ist, das n ist nur eine verneinung, ein "nicht", aber in deinem code steht ja nur ein if, kein ifdef. beendet wirds dennoch mit nem endif, sehr seltsam. ich habe ein Buch wo das drin steht, aber das ist leider nicht griffbereit
achja, und das <<39 bringt auch keinen sinn, wenn es ein schiebeoperator ist, dann würde das bedeuten, dass der wert um 39 stellen geschoben wird, was ja völlig nutzlos ist, im assembler sprichst du nur eine speicherzelle an, dh verschiebungen von 0 bis 7 sind sinnvoll.
und wenn es doch ein größer/kleiner ist, dann bringts auch keinen sinn, denn der assembler kennt diese syntax nicht. dh es müsste zu dem conditional assembly befehl gehören, aber dieser wiederum hat wenig sinn, da er sich auf einen wert bezieht der wahrscheinlich erst zur laufzeit generiert wird, also wäre ADC_Wert beim compilieren wohl eh 0, wenn man es nicht vorher setzt. sehr sehr seltsam
-
Logo, hast recht, da könnte was darüber stehen . Werde mir die Docu mal runterladen und anschauen. Danke!
gruß David
-
– BEGIN CONDITIONALLY ASSEMBLED CODE BLOCK
Begin execution of a conditional assembly block. If expr evaluates to true, the code
immediately following the if will assemble. Otherwise, subsequent code is skipped
until an else directive or an endif directive is encountered.
Hast also (weiter oben) recht gehabt. Die stelle nach den if wird nur dann übersetzt wenn eine bestimmt Bedingung vorher erfüllt wurde, Andernfalls else…
Dann ist es aber so, dass sich der Code obern irgendwie nicht reimt…
Ich stelle immer wieder fest, dass es im Internet auch VIEL Müll gibt .
Danke für die Antworten noch mal (Besonders an the_Ghost666)!!!
Gruß David
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen