quel est le cmpq instruction?
J'ai lu la définition suivante pour les syscall:
.text
.globl syscall
.type syscall,%function
.align 16
syscall:
movq %rdi, %rax /* Syscall number -> rax. */
movq %rsi, %rdi /* shift arg1 - arg5. */
movq %rdx, %rsi
movq %rcx, %rdx
movq %r8, %r10
movq %r9, %r8
movq 8(%rsp),%r9 /* arg6 is on the stack. */
syscall /* Do the system call. */
cmpq $-4095, %rax /* Check %rax for error. */
jae __syscall_error /* Branch forward if it failed. */
ret /* Return to caller. */
.size syscall,.-syscall
J'ai vu il a expliqué que la ligne cmpq $-4095 %rax
détermine si %rax contient une valeur comprise entre -1 et -4095. Comment faut-il faire? Exactement ce que fait le cmpq instruction?
OriginalL'auteur brooks94 | 2014-01-29
Vous devez vous connecter pour publier un commentaire.
cmpq $-4095, %rax
compare la version 64 bits du registre %rax avec la valeur immédiate-4095
- la valeur est signe étendu à 64-bits pour les fins de la comparaison. c'est à dire,-4095
a la 64-bit 2 en complément de la représentation:ffff ffff ffff f001
cmp
instructions de définir les indicateurs s'inscrire comme il le ferait pour unesub
(soustraire) de la deuxième opérande à partir de la "deuxième" et "première" être renversée dans le AT&T de la syntaxe. En effet, les indicateurs sont définis en fonction du résultat de:(RAX - (- 4095))
ou(RAX + 4095)
, être le même en complément de 2.Un des indicateurs est le réaliser drapeau (CF), qui est situé sur la (non signé) de débordement. Le
jae
instruction jump-si-au-dessus-ou-égal) est en fait un "alias" pourjnc
(saut-si-pas-carry). En d'autres termes, la direction générale est prise à(RAX + 4095)
ne pas transporter. En complément de 2, ce sera vrai pour les valeurs deRAX
dans la gamme:[-4095, -1]
. (En gardant à l'esprit la façon dont 2 en complément à l'arithmétique wraps).Les instructions, y compris
cmp
etjae
(ouj<cond>
) sont décrites dans: Intel® 64 et IA-32 Architectures Software developer's Manual, Volume 2.[E]les DRAPEAUX s'inscrire (et de ce que l'arithmétique des drapeaux désigner) sont décrites dans la section 3.4.3 de Intel® 64 et IA-32 Architectures Software developer's Manual, Volume 1.
OriginalL'auteur Brett Hale