Mig*_*rra 4 macos assembly x86-64 intel-syntax
嗨,我正在使用 gcc 在 mac 上处理 ASM intel_syntax noprefix,出于某种原因,我在后端不断收到此错误:64 位模式不支持 32 位绝对寻址 这是否与变量有关,在时刻是否已在 ASM 上使用内联?
这是我的代码:
#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);
}
Run Code Online (Sandbox Code Playgroud)
是的,正如错误所说,在 osx 上,您不允许使用byte ptr [c]汇编到的绝对引用。作为一种解决方法,您可以尝试byte ptr c[rip].
请注意,在内联汇编块中切换语法是非常糟糕的做法,您应该使用-masm=intel编译器切换。此外,gcc inline asm 不应该这样使用,通常您使用约束机制来引用参数。