Salut je travaille sur ASM intel_syntax noprefix sur un mac en utilisant gcc, pour une raison que j'obtiens toujours cette erreur dans le backend: 32 bits l'adressage absolu n'est pas pris en charge en mode 64 bits Est-ce que cela a à voir avec les variables, à l'heure actuelle, est utilisé sur l'ASM en ligne?erreur dans le backend: l'adressage absolu 32 bits n'est pas supporté en mode 64 bits
voici mon code:
#include <stdio.h>
char c, b;
int main() {
printf("Give me letter: ");
scanf(" %c", &c);
_
_asm( ".intel_syntax noprefix;"
"xor eax, eax;" // clear eax
"mov al, byte ptr [c];" // save c in eax
"cmp eax, 65;" // eax ? "A"
"jl Fin;" // eax < "A" -> Fin
"cmp eax, 90;" // eax ? "Z"
"jg UpC;" // eax >= Z -> Up Case
"add eax, 32;" // make low case
"jmp Fin;" // -> Fin
"UpC: cmp eax, 97;" // eax ? "a"
"jl Fin;" // eax < "a" -> Fin
"cmp eax, 122;" // eax ? "z"
"jg Fin;" // eax > "z" -> Fin
"sub eax, 32;" // make Up Case
"Fin: mov byte ptr [b], al;" // save res in b
".att_syntax");
printf("Case changed : %c\n", b);
}
Le machi abi utilise du code relogeable, donc vous ne pouvez pas utiliser l'adressage absolu. Si vous voulez obtenir un peu plus de connaissances sur la façon dont cela fonctionne, voici une autre question/réponse qui explique: http://stackoverflow.com/questions/25799551/why-does-this-movq-instruction-work-on-linux-and -not-osx/25804623 # 25804623 et apple docs: https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachORuntime/index.html#//apple_ref/doc/uid/TP40000895 –
Long histoire courte, utilisez 'GOTPCREL' (même si vous n'êtes pas sûr de son utilisation en ligne) ... ou compilez en 'i386' seulement; Prenez aussi le bon conseil de Jester ... –
En ajoutant simplement -m32 fonctionne, mais je ne sais pas si c'est la meilleure façon d'y aller. –