你好我工作的ASM intel_syntax noprefix在Mac上使用gcc,由于某种原因,我一直在后台收到此错误不支持32位绝对地址是不是在64位模式下支持 这是否与变量做,此刻正一直在ASM内联用?错误在后端:32位绝对寻址64位模式
这里是我的代码:
#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);
}
马乔ABI使用重定位代码,所以你不能使用绝对地址。如果你想获得更多关于它是如何工作的知识,这里有另外一个问题/答案解释:http://stackoverflow.com/questions/25799551/why-does-this-movq-instruction-work-on-linux-and - 不是,OSX/25804623#25804623,和苹果文档:https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachORuntime/index.html#//apple_ref/doc/uid/TP40000895 –
龙故事简短,使用'GOTPCREL'(尽管不确定它是否使用内联)或者仅编译为'i386';采取杰斯特的好建议以及... –
只是加入-m32的作品,但我不知道它是否是最好的方式去。 –