【发布时间】:2014-01-27 21:42:12
【问题描述】:
我正在尝试将内联 asm 代码从 VS 转换为 GCC (AT&T).. 原始代码是这个:
char mystr[] = "Hello world";
_asm mov eax,0
_asm lea ebx, [mystr]
这是我尝试将代码转换为 gcc at&t 语法:
char mystr[] = "Hello world";
asm("mov $0,%%eax\n"
"leal (%0),%%ebx\n"
: : "r"(mystr));
这段代码似乎不起作用,知道为什么吗? 非常感谢
【问题讨论】:
-
您遇到了什么错误?
gcc -c -S file.c生成什么? -
好吧,在 lea 行之后有一个对 int 0x80 的调用(我没有在这里写),这个调用调用了一种 printf。 (我正在为大学考试做一些内核材料)。我没有收到错误,但似乎 mystr 的地址没有正确写入 ebx,因为我看不到屏幕上显示的字符串..
-
: : "r"(mystr));告诉 gcc %ebx 已被破坏,之后无法使用其内容。您需要将
mystr放在输出列表中,而不是 "r"(mystr)) : : ;。顺便说一句,对 %eax 的更改怎么样? -
呃,我要把mystr的地址写在ebx里,为什么还要把mystrl放在输出中呢? :/ .. 至于eax,它是正确的,它应该包含0 ;)
标签: gcc assembly inline-assembly