延伸語法(Extended ASM)
格式如下:__asm__(assembler template : output operands /* optional */ : input operands /* optional */ : list of clobbered registers /* optional */ );"list of clobbered registers" : 告訴gcc這些registers在assembly code使用. 範例 把值從value存到result
#include
int main(void)
{
int value = 10;
int result;
asm("movl %1, %%eax;"
"movl %%eax, %0;"
: "=r"(result)
: "r"(value)
: "%eax"
);
printf("value: %d, result: %d\n", value, result);
return 0;
}
Brennan參考資料
x64系統修改的地方
1. 使用x86的方式來編譯,gcc使用-m32,ld使用-melf_i3862. 使用x64的register,ex. eax => rax, 而movl改成mov
asm(
"mov $13, %%rdx;"
"mov %0, %%rcx;"
"mov $0, %%rbx;"
"mov $4, %%rax;"
"int $0x80;"
::"r"(str):"rdx", "rcx", "rbx"
);
沒有留言:
張貼留言