/ / Was machen diese ARM-Montageanweisungen? - Montage, Arm

Was machen diese ARM-Montageanweisungen? - Montage, Arm

Ich bin kürzlich auf diese ASM-Anweisungen gestoßen und versuche herauszufinden, was sie tun. Ich habe ein paar ARM Assembly Bücher (wie DIES) und war in der Lage herauszufinden, was ein paar Anweisungen tun.

Zum Beispiel, MRS (Move to Register from Status) kopiert den Status von der PSR (Program Status Register) registrieren zu %0 (was ich glaube, ist Register 0).

Ich verstehe nicht was : "=r" (Cs) und andere ähnliche Anweisungen tun.

UINT32 Cp;
if((Cp & 0x1) == 0)
{
UINT32 Cs;
__asm
(
" MRS %0, PSRn"
"BIC %1, %2, #0x80n"
"cpsie i"
: "=r" (Cs), "=r" (Cp)
: "r" (Cs)
);
}

Kann mir bitte jemand erklären?

Edit 1: Dies ist in einer GlobalLock Release-Funktion. cpsie i aktiviert die Interrupts.

Antworten:

4 für die Antwort № 1

Das ist kein Assembler, sondern ein Inline-Assembler, der in C-Code eingebettet ist. Vermutlich gibt es einen Zusammenhang mit diesem Code, oder wo Sie ihn gefunden haben, was darauf hindeutet.

Siehe zum Beispiel die GCC erweiterte Asm Dokumente

Dieser Built-in gibt den Assembler (den Sie bereits identifiziert haben) in der Mitte eines C-Codes aus und teilt dem Compiler auch mit, was der Assembler getan hat: insbesondere, welche Register verwendet oder beschädigt wurden.

Die letzten beiden Zeilen geben an, welche Variablen im Assembler verwendet werden und wie sie betroffen sind

  1. "=r" (Cs) - Die Variable Cs wird als Ausgangsregister, genannt %0 im Assemblercode und wird überschrieben
  2. "=r" (Cp) - Die Variable Cp wird als Ausgangsregister, genannt %1 im Assemblercode und wird überschrieben
  3. "r" (Cs) - Cs wird als ein Eingangsregister, genannt %2 im Assemblercode

Beachten Sie, dass %0/1/2 sind nur die Positionen der Einträge in der Ein- / Ausgangsliste, beginnend bei Null.


0 für die Antwort № 2

Diese sehen aus wie Assembler-Anweisungen. Von dem von Ihnen bereitgestellten Code scheint es, als würden Sie versuchen, die von einem Compiler ausgegebene Assemblersprache zu entschlüsseln. Diese "Anweisungen" sagen dem Compiler-Backend wahrscheinlich, Opcodes zu emittieren, die für die Zielmaschine geeignet sind Der Compiler bleibt relativ einfach, erlaubt dem Compiler jedoch, spezifische Anweisungen für bestimmte Ziele auszusenden (und zu optimieren).