ich zwei Möglichkeiten, wie der Carry-Flag encounted haben kann eingestellt werden:Wie funktionieren Subq und Cf zusammen?
0x00_00_00_00_00_00_00_00 - 0x80_00_00_00_00_00_00_00
(unterstreicht zeigen Bytes)
wenn tut dies durch Subtraktion, würden wir borgen müssen von einem bisschen haben wir nicht, was die CF auf 1 setzen sollte.
Allerdings hatte ich den Eindruck, dass ALUs nicht subtrahieren, sondern fügen Sie einfach das Zweierkomplement. das Zweierkomplement von 0x80_00_00_00_00_00_00_00 ist 0x80_00_00_00_00_00_00_00. so, 0x00_00_00_00_00_00_00_00 - 0x80_00_00_00_00_00_00_00 tragen keine Bits aus dem 63-Bit, das die CF auf 0
Welche dieser Situationen gilt für 64-Bit-Werte in x86 gesetzt würde?
Führt die ALU tatsächlich eine Subtraktion durch oder konvertiert sie in das Zweierkomplement und die umgewandelten Werte, um eine Subtraktion durchzuführen?
Dank
Warum haben Sie es nicht versucht? x86 wird subtrahieren, so dass CF auf 1 gesetzt wird. Einige Architekturen verwenden tatsächlich CF für die Subtraktion umgekehrt. – Jester
Ich bin mir nicht sicher, wie man das testet? Wie würde ich das Ergebnis sehen? Ich bin in einer Einführung in die Systemklasse; Alles ist in C. Ich kann die Demontage sehen, aber ich habe keine Ahnung, wie man die Statusregister sieht. Ich könnte wahrscheinlich etwas programmieren, um zu versuchen, was passiert ist, aber ich würde gerne wissen, wie man die Flaggen tatsächlich sieht. –
Verwenden Sie einen Debugger. '(gdb) p $ eflags' ergibt' $ 1 = [CF PF SF IF OF] 'Auch wenn Sie in C codieren, warum interessieren Sie sich für Flags? Der Compiler kümmert sich um sie ... – Jester