Forum: Mikrocontroller und Digitale Elektronik 32bit Konstantenzuweisung in ASM mit µVision


von Frank (Gast)


Angehängte Dateien:

Lesenswert?

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

von Frank (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Ralf (Gast)


Lesenswert?


von Frank (Gast)


Lesenswert?

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

von Frank (Gast)


Angehängte Dateien:

Lesenswert?

hier der vergessene Anhang.

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
Noch kein Account? Hier anmelden.