运行C语言内嵌汇编程序linux与VS2019
GCC内嵌汇编
基本行内汇编
基本格式:
asm("statements");// statements为汇编语句
__asm__ __volatile__("hlt");// 不要优化代码,保持原样指令
如果有多行汇编,则每一行后都要加上“\n\t”,例如:
asm( "pushl %eax\n\t"
"movl $0,%eax\n\t"
"popl %eax");
或者可以写多行:
asm("movl %eax,%ebx");
asm("xorl %ebx,%edx");
asm("movl $0,_booga);
扩展的行内汇编
- 在扩展的行内汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入寄存器,以及如何将计算结果写回C变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作。
- 使用内嵌汇编,要先编写汇编指令模板,然后将C语言表达式与指令的操作数相关联,并告诉GCC对这些操作有哪些限制条件。例如:
__asm__ __violate__ ("movl %1,%0" : "=r" (result) : "r"(input));
// “movl %1,%0”是指令模板;“%0”和“%1”代表指令的操作数,称为占位符,“=r”代表它之后是输入变量且需用到寄存器,指令模板后面用小括号括起来的是C语言表达式 ,其中input是输入变量,