Hi, ganz kurze und schlechte Frage: Kann man in Register statt mit Hexadezimalzahlen, Binärzahlen oder Shiftbefehlen auch mit Dezimalzahlen setzten? Also statt: (Die Oderverknüpfung nur exemplarisch) DDRA |= 0x10 Oder DDRA |= (1<<4) Oder DDRA |= 0b00010000 DDRA |= 16
logisch geht das, es macht nur keinen Sinnn, da man nicht mehr auf den esrten Blick sehen kann, welches Bit denn nun gesetzt wird.
Steel schrieb: > logisch geht das, es macht nur keinen Sinnn, da man nicht mehr auf den > esrten Blick sehen kann, welches Bit denn nun gesetzt wird. Richtig. Viel Spaß mit "DDRX |= 237;" Jeromyo Hochgesang schrieb: > oder Shiftbefehlen Das sind keine Shiftbefehle. Die werden vom Compiler ausgerechnet und letztlich binär ins Prozessorregister geschrieben. Da brauchst du dir um die Performance keine Sorgen machen. mfg.
Danke Thomas Stimmt, das mit dem "wegoptimieren" der Befehle durch den Compiler stand ja sogar im AVR GCC Tut. facepalm
Manche Assembler bieten eine Voreinstellung, wie Zahlen ohne Postfix dezimal oder hexadezimal oder gar oktal interpretiert werden. Die Voreinstellung ist oft dezimal. Bei hexadezimal fügt man seinen Zahlen ein H an. Wenn man ganz sicher gehen will, fügt man auch Dezimalzahlen den Postfix D an. Gelegentlich arbeite ich mit dem Assembler auch noch in BCD-Arithmetik. Das ist eine Frage des Vorhabens, ob man effektiver BCD oder BIN verarbeiten möchte. Einmal rechne ich direkt in BCD-Arithmetik, wenn Werte auf einem Display ausgegeben werden, und gar nicht viel intern gerechnet wird. Ein anderes mal hexadezimal, wenn intern noch viel gerechnet wird. Dann braucht man eine kleine Umwandlungsroutine BCD-BIN und BIN-BCD. Die belegt weniger Codespeicher, braucht dafür aber mehr RAM-Zellen. Es ist eine Abwägungssache. Ich habe es ja oft mit spartanischen Rechnern zu tun, kleine PIC, oder 8048. Für die BCD-Arithmetik gibt es oft einen Befehl DA, Decimal Adjust. Primitive Rechenwerke haben den auch nicht, da muß man bei Überträgen eine 6 addieren, wenn das Ergebnis die 9 überschreitet, oder subtrahieren, wenn es 0 unterschreitet. Dort ist direktes Rechnen mit BCD-Zahlen lästig. Meine Assembler machen alle z.B. aus MOV A,#64 ein MOV A,#40H. Um absolut sicher zu sein, hängt man der Dezimalzahl ein D an, z.B. 64D. Der Assembler wandelt die 64D dann in 40H um.
Jeromyo Hochgesang schrieb: > Hi, > > ganz kurze und schlechte Frage: > > Kann man in Register statt mit Hexadezimalzahlen, Binärzahlen oder > Shiftbefehlen auch mit Dezimalzahlen setzten? > Also statt: (Die Oderverknüpfung nur exemplarisch) > > DDRA |= 0x10 Oder > DDRA |= (1<<4) Oder > DDRA |= 0b00010000 > > DDRA |= 16 ....hmmm,ich kann mich noch dunkel daran erinnern, das ich mir als Anfänger die selbe Frage stellte.....verblüffend einfach kam ich zur Antwort....ich probierte es einfach aus und schaute was der Kompiler sagte....
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.