2015-04-27 5 views
5

Die documentation for imul lautet:Wie wird das Vorzeichen-Flag mit dem Imul-Befehl berechnet?

SF nach dem höchstwertigen Bit des Ergebnisoperanden-size-trunkierten im Ziel aktualisiert wird.

Für einen 64-Bit-Betrieb, dann, mein Verständnis ist, dass SF = (a * b) >> 63, oder einfacher, wenn a und b sind unterzeichnet, SF = a * b < 0.

Aber ich bin immer ein unerwartetes Ergebnis Multiplikation zweier großer Zahl:

mov rax, 0x9090909090909095 
mov rdx, 0x4040404040404043 
imul rax, rdx 

Das Ergebnis 0x9090909090909095 * 0x4040404040404043 ist 0xefcba7835f3b16ff. Es hat das Vorzeichen-Bit gesetzt, jedoch wird das SF-Flag nach der imul-Anweisung gelöscht. Was ist los?


Dies war cross-posted to the Intel forums vor einiger Zeit.

+0

Ich sehe einen Fehler in dieser Dokumentation: 'SF ← TMP_XP [32];', sollte offensichtlich '31' sein. Was hat Intel zu dieser Anweisung übrigens zu sagen? – usr2564301

+1

@Jongware, das ist wahr. Ich überprüfe, ob das aktuellste Volume 2A das noch hat. Diese Dokumentation wurde automatisch aus der September 2014-Version extrahiert, also hatte Intel zu diesem Zeitpunkt darüber zu berichten. – zneak

+0

@Jongware, die aktuellste Version von Volume 2A hat immer noch diesen Fehler. – zneak

Antwort

4

Other sources sagen, dass SF nach imul undefiniert ist. Dies bedeutet höchstwahrscheinlich, dass das Ergebnis von SF auf neueren Prozessoren gut definiert ist, aber ältere bieten diese Funktion nicht. Mein Computer ist 5 Jahre alt, wahrscheinlich fällt ich in die zweite Kategorie.

EDIT: mit der Wayback-Maschine von Archive.org, fand ich, dass die Dokumentation von der Feststellung geändert, dass SF ist nicht definiert zu SF ist in der September 2014 Revision definiert. Die vorherige Revision, June 2014, sagt immer noch, dass SF nicht definiert ist. Dies ist in dem begleitenden Dokument dokumentiert, obwohl die Begründung für die Änderung nicht ist.

EDIT 2 Meine CPU ist ein i7 M 620. ich Zugang zu einem noch älteren Core2Duo P7550 hatte und war in der Lage zu bestätigen, dass imul nicht SF auf sich entweder nicht eingestellt.

EDIT 3 aus der Ausgabe 2016 September starten, sagt IMUL dass SF nicht definiert ist, so dass dies das Problem behebt.

+1

Fünf Jahre sind nicht so alt, Intel hat in dieser Zeit keine grundlegenden Änderungen an ihrer Architektur vorgenommen. –

+0

Stellen Sie sicher, dass Sie eine bessere Erklärung finden, die Sie finden. Kennen Sie einen Ort, der die Änderungen zwischen den Dokumentationssätzen verfolgt? – zneak

+0

Nun, das Dokument besagt, dass es für Prozessoren bis hin zum Pentium gilt. Variationen zwischen Prozessoren sollen dokumentiert werden. Es ist also entweder ein Fehler in Ihrem Prozessor, ein Fehler in der Dokumentation, Sie verwenden keinen Intel-Prozessor oder etwas anderes. –

Verwandte Themen