Wenn Sie nur das Register lesen möchten, können Sie einfach:
%Vor%Offensichtlich ist es an Instanziierung gebunden.
Eine andere Möglichkeit ist die Inline-Montage. Zum Beispiel:
%Vor% Dies speichert den Wert ecx
in der Variablen value
. Ich habe bereits eine ähnliche Antwort hier gepostet >.
Auf welche Register möchten Sie zugreifen?
Register für allgemeine Zwecke können normalerweise nicht von C aus aufgerufen werden. Sie können Registervariablen in einer Funktion deklarieren, aber sie geben nicht an, welche spezifischen Register verwendet werden. Außerdem ignorieren die meisten Compiler das Schlüsselwort register und optimieren die Registerverwendung automatisch.
In eingebetteten Systemen ist es oft erforderlich, auf Peripherieregister zuzugreifen (wie Timer, DMA-Controller, I / O-Pins). Solche Register sind normalerweise speicherabgebildet, so dass sie von C ...
aus zugänglich sinddurch Definieren eines Zeigers:
%Vor%oder mit dem Pre-Prozessor:
%Vor%Oder Sie können die Assembly-Routine verwenden.
Für die Verwendung der Assemblersprache gibt es (mindestens) drei Möglichkeiten:
Wenn Sie sich auf einem 32-Bit-Prozessor befinden und einen geeigneten Compiler verwenden, dann ja. Das genaue Mittel hängt von dem jeweiligen System und Compiler ab, für den Sie programmieren, und natürlich wird Ihr Code so unportabel wie möglich sein.
Wenn Sie MinGW verwenden, sollten Sie sich die Inline-Assembler-Syntax von GCC ansehen .
Sie können natürlich. "MinGW" (gcc) erlaubt (wie andere Compiler) Inline-Assembly, wie andere Antworten bereits zeigen. Welche Assembly, es hängt von der CPU Ihres Systems ab (prob. 99,99%, dass es x86 ist). Dies macht jedoch Ihr Programm nicht auf anderen Prozessoren tragbar (nicht so schlimm, wenn Sie wissen, was Sie tun und warum).
Die relevante Seite, die über Assembly für gcc spricht, ist hier und hier , und wenn Sie möchten, auch hier . Vergessen Sie nicht, dass es nicht spezifisch sein kann, da es architekturabhängig ist (gcc kann für mehrere CPUs kompilieren)
Es besteht im Allgemeinen keine Notwendigkeit, von einem in einer Hochsprache geschriebenen Programm auf die CPU-Register zuzugreifen: Hochsprachen wie C, Pascal usw. wurden genau erfunden, um die zugrundeliegende Maschine zu abstrahieren und ein Programm zu rendern mehr maschinenunabhängig.
Ich vermute, dass Sie versuchen, etwas zu tun, aber keine Ahnung haben, wie man es konventionell macht.
Viele Zugriffe auf die Register sind in Konstrukten höherer Ebene oder in System- oder Bibliotheksaufrufen verborgen, wodurch Sie vermeiden können, den "Dirty-Part" zu codieren. erzählen Sie uns mehr über das, was Sie tun möchten, und wir schlagen Ihnen vielleicht eine Alternative vor.
Tags und Links c assembly inline-assembly mingw cpu-registers