Quelles sont les instructions pour le cast de type dans Intel 64 ISA?Quelles sont les instructions pour le cast de type dans Intel 64 ISA
Comme lancer long int pour doubler?
Je fais quelques tests comme celui-ci:
$ cat type_cast.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
long int a = 8l;
double b;
b = (double)a;
printf("%f", b);
return 0;
}
$ gcc -O0 -g -Wall type_cast.c -o type_cast
$ objdump -S type_cast
La partie principale est pour:
int main()
{
4004c4: 55 push %rbp
4004c5: 48 89 e5 mov %rsp,%rbp
4004c8: 48 83 ec 10 sub $0x10,%rsp
long int a = 8l;
4004cc: 48 c7 45 f8 08 00 00 movq $0x8,-0x8(%rbp)
4004d3: 00
double b;
b = (double)a;
4004d4: f2 48 0f 2a 45 f8 cvtsi2sdq -0x8(%rbp),%xmm0
4004da: f2 0f 11 45 f0 movsd %xmm0,-0x10(%rbp)
printf("%f", b);
4004df: b8 f8 05 40 00 mov $0x4005f8,%eax
4004e4: f2 0f 10 45 f0 movsd -0x10(%rbp),%xmm0
4004e9: 48 89 c7 mov %rax,%rdi
4004ec: b8 01 00 00 00 mov $0x1,%eax
4004f1: e8 c2 fe ff ff callq 4003b8 <[email protected]>
return 0;
4004f6: b8 00 00 00 00 mov $0x0,%eax
}
Il utilise cvtsi2sdq -0x8 (% RBP),% xmm0 et movsd% xmm0, -0x10 (% rbp) pour passer de long int à double.
Je me demande quelles sont les autres méthodes généralement utilisées dans Intel 64 ISA.
Etes-vous intéressé par les instructions générées? Si oui, quelle application de la connaissance allez-vous faire? – wallyk
@wallyk Je suis intéressé par les instructions. Je viens de générer des instructions à partir de C pour voir quels types d'instructions peuvent être utilisés pour le casting de type. Je veux savoir la méthode de casting de type général et efficace dans Intel 64 ISA. – ericzma