当前位置: 技术问答>linux和unix
c内嵌汇编问题,超级初级,大家帮忙
来源: 互联网 发布时间:2016-11-04
本文导语: void main() { __asm__(" jmp forward backward: popl %esi # Get the address of # hello world string movl $4, %eax # Do write system call movl ...
void main()
{
__asm__("
jmp forward
backward:
popl %esi # Get the address of
# hello world string
movl $4, %eax # Do write system call
movl $2, %ebx
movl %esi, %ecx
movl $12, %edx
int $0x80
int3 # Breakpoint. Here the
# program will stop and
# give control back to
# the parent
forward:
call backward
.string "Hello Worldn""
);
}
使用 gcc –o hello hello.c来编译它
但是编译不过,提示双引号没匹配,哪位同学熟悉c嵌入汇编,帮着看看,谢谢
{
__asm__("
jmp forward
backward:
popl %esi # Get the address of
# hello world string
movl $4, %eax # Do write system call
movl $2, %ebx
movl %esi, %ecx
movl $12, %edx
int $0x80
int3 # Breakpoint. Here the
# program will stop and
# give control back to
# the parent
forward:
call backward
.string "Hello Worldn""
);
}
使用 gcc –o hello hello.c来编译它
但是编译不过,提示双引号没匹配,哪位同学熟悉c嵌入汇编,帮着看看,谢谢
|
我编译运行过了,下面修改过的代码是可以的,内联汇编有要求:
1.指令必须包括在引号里。
2.如果包含的指令超过一条,那么必须使用新行字符分割汇编语言代码的每一行。通常,还包含制表符帮助缩进汇编语言代码,使代码更容易阅读。
需要第二个规格是因为编译器逐字的取得asm段中的汇编代码,并且把他们放在为程序生成的汇编代码中。每条汇编语言指令都必须在单独的一行中--因此需要包含新行字符。
1.指令必须包括在引号里。
2.如果包含的指令超过一条,那么必须使用新行字符分割汇编语言代码的每一行。通常,还包含制表符帮助缩进汇编语言代码,使代码更容易阅读。
需要第二个规格是因为编译器逐字的取得asm段中的汇编代码,并且把他们放在为程序生成的汇编代码中。每条汇编语言指令都必须在单独的一行中--因此需要包含新行字符。
void main()
{
__asm__(
"jmp forwardnt"
"backward:nt"
"popl %esint"
"movl $4, %eaxnt"
"movl $2, %ebxnt"
"movl %esi, %ecxnt"
"movl $12, %edxnt"
"int $0x80nt"
"int3nt"
"forward:nt"
"call backwardnt"
".string "Hello World"nt"
);
}