swapf befehl in C? (PIC)

Gast #488621
Lesenswert?
• ▲
▼
mit einem C-Befehl wird das gar nicht gehen. Du kannst es logisch 
nachbasteln und hoffen, dass der Optimierer erkennt, dass es mit einem 
swap erledigt ist (was durchaus nicht selbstverständlich ist), oder mit 
inline-Assembler.
Gast #488630
Lesenswert?
• ▲
▼
also könnte ich  *2*2*2*2 (also*16) rechnen, und
dann würden die bits um vier stellen nach links verschoben werden, oder?
beim inline Assembler habe ich das problem, dass ich die in C 
deklarierten variabeln nicht als diese im inline Assembler gebrauchen 
kann!!
könnte ich nicht irgendwie der variabel eine Adresse zuweisen (im C)
und danach diese im inline Assembler so benützen?
Gast #488782
Lesenswert?
• ▲
▼
@Peter S.

>Am effizientensten geht es wohl mit einem Makro welcher per Inline-ASM
>einen swap-Befehl generiert:

>#define SWAP(x) asm volatile("swap %0":"=r"(x):"0"(x))

Ich kann mit Inline Assembler direkt auf C-Variablen zugreifen? Das geht 
mit WinAVR?

MFG
Falk
Gast #489483
Lesenswert?
• ▲
▼
Das hängt ja auch vom C-Compiler ab.

Beim CC5X-Compiler gibt es zB. einige vordefinierte Funktionen die der 
Assembleranweisung entsprechen. z.B. NOP() und für swapf gibts auch 
einen, nur weiß ich jetzt gerade nicht genau wie der heißt 
swap(Variablenname), oder swapf(variablenname,Parameter) oder so. Schau 
doch mal ins manuel zu deinem C-Compiler.

Stefan B.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren