Ist es möglich, den Zugriff auf 32-bit-Register in C?
Ist es möglich, den Zugriff auf 32-bit-Register in C ? Wenn ja, wie ? Und wenn nicht, dann ist es eine Möglichkeit zum einbetten von Assembler-code in C ? Ich bin mit dem MinGW-compiler, durch die Art und Weise.
Vielen Dank im Voraus!
- erzählen Sie uns mehr über Ihre Bedürfnisse: warum würden Sie wollen, um den Zugriff auf die CPU-Register ???
- Sie können indirekt erhalten und setzen der Register für windows mit GetThreadContext und sein Bruder SetThreadContext, ohne asm benötigt: msdn.microsoft.com/en-us/library/ms679362%28VS.85%29.aspx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du willst, nur Lesen die registrieren, können Sie sich einfach:
Natürlich, es ist gebunden an die Instanziierung.
Andere Möglichkeit ist die Verwendung von inline-assembly. Zum Beispiel:
Diese speichert die
ecx
Wert in die variablevalue
. Ich habe bereits geschrieben eine ähnliche Antwort hier.Registriert wollen Sie zugreifen?
General purpose Register normalerweise nicht zugegriffen werden kann, C. Sie können erklären, register-Variablen in einer Funktion, aber nicht angeben, welche Register verwendet werden. Weiter, die meisten Compiler ignorieren das Schlüsselwort register und optimieren der register-Auslastung automatisch.
In eingebetteten Systemen, ist es oft notwendig, um Zugang Peripherie-Register (wie Timer, DMA-Controller, I/O-pins). Diese Register sind in der Regel memory-mapped, so dass Sie zugegriffen werden kann von C...
durch die Definition einer Zeiger:
oder durch die Verwendung von pre-Prozessor:
Oder nutzen Sie die Assembly-routine.
Für die Verwendung Assembler, es gibt (mindestens) drei Möglichkeiten:
Können Sie die assembly einbetten in C
http://en.wikipedia.org/wiki/Inline_assembler
Beispiel aus der wikipedia
extern int errno;
Ich glaube nicht, dass Sie tun können, Sie direkt. Sie kann tun, inline-Montage mit code wie:
Wenn Sie auf einem 32-bit-Prozessor und die Verwendung einer adäquaten compiler, dann ja. Das genau bedeutet, hängt vom jeweiligen system-und compiler-Sie sind für die Programmierung, und natürlich wird Ihr code etwa so unportabel, wie sein kann.
In Ihrem Fall unter Verwendung von MinGW, sollten Sie schauen,GCC-inline-assembly-syntax.
Können Sie natürlich. "MinGW" (gcc) können (wie auch andere Compiler) inline Assembler, wie die anderen Antworten schon zeigen. Die Montage hängt es von der cpu Ihres Systems (prob. Zu 99,99%, dass es x86). Dies macht jedoch Ihr Programm nicht portabel auf andere Prozessoren (nicht schlecht, wenn man weiß, was man tut und warum).
Die entsprechende Seite reden Versammlung für gcc ist hier und hier, und wenn Sie wollen, auch hier. Vergessen Sie nicht, dass es nicht spezifisch, da es von der Architektur abhängig (gcc kompilieren kann für mehrere cpus)
gibt es in der Regel keinen Zugriff auf das CPU-Register von einem Programm, das in einer high-level-Sprache: high-level-Sprachen wie C, Pascal, etc. wo genau erfunden, um die Abstraktion der zugrunde liegenden Maschine und machen ein Programm mehr Maschine-unabhängig.
ich vermute, Sie versuchen, etwas leisten, aber haben keine Ahnung wie Sie eine konventionelle Art und Weise, es zu tun.
viele Zugriff auf die Register ausgeblendet sind in Konstrukte höherer Ebene oder in der system-oder library-Aufrufe, die können Sie vermeiden, die Kodierung der "schmutzige Teil". erzählen Sie uns mehr über das, was Sie tun möchten, und wir können Sie vorschlagen, eine alternative.