cmpq $-4095, %rax
vergleicht das 64-Bit-Register% rax mit dem unmittelbaren Wert -4095
- der Wert wird für den Vergleich auf 64-Bit vorzeichenerweitert. h. -4095
hat die 64-Bit Zweierkomplementdarstellung: ffff ffff ffff f001
cmp
Instruktionen setzen das Flagsregister so, wie es für eine sub
(Subtraktion) des zweiten Operanden von der ersten wäre - "zweite" und "erste" werden in AT & amp; T Syntax umgekehrt. In der Tat werden die Flags entsprechend dem Ergebnis von (RAX - (- 4095))
oder (RAX + 4095)
gesetzt, wobei sie im Zweierkomplement gleich sind.
Eines der Flags ist das Flag carry (CF), das auf (unsigned) overflow gesetzt ist. Der Befehl jae
(jump-wenn-ob-gleich) ist eigentlich ein 'Alias' für jnc
(jump-if-not-carry). Mit anderen Worten, die Verzweigung wird genommen, wenn (RAX + 4095)
nicht überträgt. Im Zweierkomplement gilt dies für Werte von RAX
im Bereich: [-4095, -1]
. (Denken Sie daran, wie arithmetische Umbrüche von Zweierkomplementen).
Die Anweisungen, einschließlich cmp
und jae
(oder j<cond>
), sind beschrieben in: Intel® 64 und IA-32 Architectures Software-Entwicklerhandbuch, Band 2 .
Das [E] FLAGS-Register (und was die arithmetischen Flags anzeigen) wird in Abschnitt 3.4.3 von Entwicklerhandbuch für Intel® 64 und IA-32 Architectures, Band 1 .