Forum: Compiler & IDEs m32r-elf-as: Assemblerprobleme


von Alex K. (alexander_k72)


Lesenswert?

Hallo zusammen,

ich habe mir eine Crosstoolchain für einen M32R von NEC/Renesas 
aufgesetzt (gcc-4.7.2 mit newlib) und versuche damit, ein als 
Assembler-Quelltext vorliegendes Teilprogramm zu bauen.

Es beginnt so:
1
  .SECTION  FUNC, CODE, ALIGN=16    ;AREA aligned on 16-byte boundary 
2
3
  .MACRO  HostCall  num, inst
4
5
  .ALIGN  16
6
  XOR3  r0, r0, #(0x5A00 + \num)
7
  XOR3  r0, r0, #(0x5A00 + \num)
8
  \inst  r0, @(0,r1)
9
  JMP    r14
10
  .ALIGN  16
11
  .ENDM
12
13
HostCallNoBuffer    HostCall  0, LDB
14
HostCallPutString    HostCall  2, LDB
15
(...)

Mein m32r-elf-as beschwert sich beim Aufruf (`m32r-elf-as -o code.o 
code.s`) aber schon über die erste Zeile:
1
[lynix@thor helloworld]$ m32r-elf-as -o code.o code.s
2
code.s: Assembler messages:
3
code.s:1: Error: character following name is not '#'
4
code.s:13: Error: Falscher Befehl »hostcallnobuffer HostCall 0,LDB«
5
code.s:14: Error: Falscher Befehl »hostcallputstring HostCall 2,LDB«

Kann mir jemand sagen, was an dem Assembler-Quelltext nicht stimmen 
könnte?


Vielen Dank und Viele Grüße

lynix

von Andreas B. (andreas_b77)


Lesenswert?

Auf die Schnelle würde ich sagen, dass der as die .section Direktive im 
Solaris-Kompatibilitätsmodus interpretiert, und da fehlen die '#' bei 
den Flags. Das ist aber ohnehin falsch, die Zeile ist keine korrekte 
Definition einer ELF Section.

von Alex K. (alexander_k72)


Lesenswert?

Okay, das ist ja interessant...

Also das in Assembler vorliegende Stück Code gehört zu einem 
(proprietären) Instruktionssatzsimulator und soll bestimmte Funktionen 
auf den Simulator abbilden, damit z.B. printf()-Aufrufe im Binary auf 
dem Simulations-Host ausgeführt werden.

Das File sollte eigentlich korrekt sein, zumindest wird es zusammen mit 
dem Simulator für unverschämte Summen verkauft. Sieht der Code für Dich 
nach irgendwas anderem validen aus?

von Oliver (Gast)


Lesenswert?

Alex K. schrieb:
> Das File sollte eigentlich korrekt sein,

Das wird es schon sein, aber nur für die dazugehörige proprietäre 
toolchain, die mit den prorietären Befehlen auch etwas anfangen kann.

Oliver

von Andreas B. (andreas_b77)


Lesenswert?

Wenn ein Assembler nicht gerade versucht, einen anderen Assembler 
nachzuahmen, dann sind sie meist nicht quelltextkompatibel. Also 
entweder den Assembler verwenden, für den die Dateien geschrieben 
wurden, oder die gegebenen Quelltexte für den GNU as umarbeiten.

In dem zitierten Ausschnitt müsste eben die .SECTION an das Format von 
GNU as auf ELF Targets angepasst werden oder ganz weggelassen werden 
(hier scheint nichts nötiges außer dem ALIGN=16 zu sein, und das müsste 
bei GNU normalerweise ohnehin über den Linker geregelt werden). Und die 
Labels müssen mit Doppelpunkt abgeschlossen werden. Die Makro-Definition 
würde sogar so durchgehen.

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.