Während ich die ganze 4-zeilige Stichprobe, die mir gegeben wurde, nicht auflisten sollte (da dies eine Hausaufgabenfrage ist) bin ich verwirrt, wie das gelesen und übersetzt werden soll C.x86-64 Assembly "cmovge" zu C code
cmovge %edi, %eax
Was ich bisher zu verstehen ist, dass der Befehl ein bedingter Umzug für wenn das Ergebnis> =. Es vergleicht den ersten Parameter einer Funktion %edi
mit dem Ganzzahlregister %eax
(dem in der vorherigen Zeile des Assemblercodes der andere Parameterwert %esi
zugewiesen wurde). Ich verstehe sein Ergebnis jedoch nicht.
Mein Problem ist die Interpretation des optimierten Codes. Es manipuliert den Stapel nicht, und ich bin mir nicht sicher, wie man das in C schreibt (oder zumindest den gcc
Schalter, den ich sogar verwenden könnte, um das gleiche Ergebnis beim Kompilieren zu erzeugen).
Könnte jemand bitte ein paar kleine Beispiele geben, wie die cmovge
Anweisung in C-Code übersetzt werden könnte? Wenn es als eigene Codezeile keinen Sinn ergibt, können Sie sich etwas daraus machen.
Dies ist in x86-64 Assembly über ein virtualisiertes Linux-Betriebssystem (CentOS 7).
Haben Sie die insn ref Handbuch lesen: HTML hier extrahieren: http: //www.felixcloutier .com/x86/CMOVcc.html. Weitere Links in [dem x86-Tag-Wiki] (http://stackoverflow.com/tags/x86/info). –