Warum ist das Carry-Flag bei einer Subtraktion bei null ist der minuend?

Im moment Schreibe ich meine eigene kleine Bibliothek für arithmetische und logische Operationen für sehr große vorzeichenlose Ganzzahlen. Um die performance zu verbessern habe ich beschlossen, einige Funktionen in der Montage. So, hier ist meine Frage.
Während die Subtraktion von zwei vorzeichenlosen ganzen zahlen das Carry-Flag ist gesetzt, wenn ich eine beliebige Zahl abziehen, von 0.

Aber warum ist das Carry-Flag in dieser situation? Das Carry-Flag ist nur gesetzt, wenn ein überlauf Auftritt, aber wenn ich eine beliebige Zahl abziehen von der null verstehe ich nicht, einen überlauf.
Oder bin ich falsch?

  • Hinweis: schreiben Sie Ihre eigenen Operationen in der Montage-möglicherweise nicht die Optimierung, die Sie erwarten. Der compiler überprüft nicht die inline-Montage und hat keine Möglichkeit zu optimieren. Finden Sie die compiler besser optimieren, wenn du einfach eine logische C-code.
  • Vielen Dank für Ihre Beratung. Aber ich weiß nicht inline-assembler. Ich Schreibe separate Teile in der Montage und ich einen link auf diese Objekt-Dateien mit dem C-code.
  • Dann gibt es noch weniger chance, es kann eine beliebige Optimierung des assembler-Routinen innerhalb der gesamten Struktur des Codes. Versteh mich nicht falsch, ich bin nicht klopfen versuchen, um an Geschwindigkeit zu gewinnen mit assembler, ich dachte es würden immer schneller zu, aber vergleichen Sie immer die Leistung des Codes mit verknüpften Montage auf die Leistung des Codes geschrieben in gerade C mit vollständiger compiler Optimierungen (-O3 auf den meisten -Ofast für die gcc-version >= 4.6.0). Compiler Recht gut optimieren heute und 9/10-mal die geraden C wird schneller sein.
  • OK, danke ich werde das im Hinterkopf behalten. Das größte problem, das ich habe, ist die Tatsache, dass es keinen einfachen Weg, in C überprüfen Sie den status des carry-flag und verwenden Sie es im weiteren Betrieb. Also im moment nutze ich das höchstwertige bit des vorzeichenlosen integer-Typ, wie das carry-flag. Aber ich bin nicht wirklich zufrieden mit, dass. Das ist, warum ich umsetzen will, die core-Logik der Subtraktion und addition in assembler. Aber vielleicht hat ja jemand eine bessere Idee, das zu tun. Ich bin immer offen für andere Vorschläge.
InformationsquelleAutor idlmn89 | 2016-07-03
Schreibe einen Kommentar