Hallo, ich möchte eine 32bit Konstante einigen Registern zuweisen. Verwenden möchte ich den Assembler von Keil µVision3. Das funktioniert nur mit einem MX51-Prozessor! Dabei wird im Assembler control string "MOD_MX51" verwendet und die additional reserved symbols sind verwendbar. Wenn ich nun als Device ein SAB80C537 verwende und über Misc Controls "MOD_MX51" eintrage, erhalte ich folgende Fehlermeldung des Assembler: A51 FATAL ERROR - LINE: D:\Programme\Keil\C51\BIN\A51.EXE main.a NOMOD51 MOD_MX51 # ERROR: UNKNOWN CONTROL A51 TERMINATED. Target not created Meine Frage ist wie mache ich eine 32bit-Konstantenzuweisung ab dem dritten Byte bei einem SAB80C537? Siehe Projekt im Anhang! Danke
warum funktioniert es nicht wenn ich so zuweise? Konstante equ 12345678h mov r7,#Konstante mod 256 mov r6,#Konstante/0ffh mod 256 mov r5,#Konstante/0ffffh mod 256 mov r4,#Konstante/0ffffffh mod 256 Der Assembler macht daraus: C:0x0000 7F78 MOV R7,#0x78 C:0x0002 7E56 MOV R6,#0x56 C:0x0004 7D00 MOV R5,#0x00 C:0x0006 7C00 MOV R4,#0x00 Als wäre "Konstante" nur ein Datenwort, also 16bit.
Hi
>warum funktioniert es nicht wenn ich so zuweise?
Weiß ich nicht. Aber rechnen kann er auch nicht:
#Konstante/0ffh mod 256 ist $9D und nicht $56.
Es müsste nämlich richtig '#Konstante/0100h mod 256' heissen. Für die
restlichen Ausdrücke analog.
Kennt dein Assembler keine Shift-Operatoren?
MfG Spess
Was du brauchst ist das: http://www.keil.com/support/man/docs/a51/a51_op_low.htm http://www.keil.com/support/man/docs/a51/a51_op_bytex.htm Ralf
zuerst möchte ich mich bei Euch für Eure Antworten bedanken. spess53, Du hast natürlich Recht, eigenartig ist aber, dass ich in meinem Hex-File nach der Übersetzung von (Konstante/0ffh mod 256) 56h erhalten habe. Warum, muss ich nochmals überprüfen. Ab dem dritten Byte ist bei dieser Art der Zuweisung das Ergebnis immer 0h. Daraus folgere ich, dass "Konstant" im Assembler nur als Datenwort mit 16bit geführt wird. Wie könnte ich die Zuweisung mit Shift-Operatoren ausführen? Ralf, genau diese Operatoren sind bei meinem Device (SAB 80C537) nicht ohne weiteres verwendbar. Diese sind eine Erweiterung, die mit "MOD_MX51" zugänglich gemacht wird. Dazu sollte ich noch erwähnen, dass ich C51 und nicht C166 von Keil verwende. Benutze ich nur probeweise einen MX51-Prozessor (z.B. 8x51MA2), wird die Quelle fehlerlos übersetzt und bei einem Test mit dem Debuger erfolgen die Zuweisungen fehlerfrei. Leider kann ich diese Device nicht in dem Projekt, in dem ich eigentlich solch eine Zuweisung brauche. Kann ich in µVision diese Zuweisung auch in C schreiben und dann alles weiter in Assemblersprache? Könnte mir jemand das mit dem Projekt (ist eine Variante des Projekt aus der ersten Anfrage) im Anhang demonstrieren? Danke
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.