ATT学习笔记汇编之内联c语言

asm("assembly code");ansi c将asm用于其它用途,用__asm__替换在asm后面加上 volatile可以禁止编译器优化asm volatile ("pusha \n\tpopa");__asm__ __volatile__ ("pushl $1\n\t");扩展asmasm ("asm code" : output locate : input operands : changed registers)changed register 改变的寄存器"constraint" (variable)位置 变量修饰符+ 读取和写入操作数= 只能写入操作数% 如果必要,操作数可以和下一个操作数切换。& 在内联函数完成之前,可以删除或者重新使用操作数。约束: 描述a 使用%eax ax alb %ebxc %ecxd %edxS %esi siD %edi dir 任何可用的通用寄存器q %eax ebx ecx edx之一A 对64位使用%eax 和 %edxf 使用浮点寄存器t 使用第一个(顶部)浮点寄存器u 第二个浮点寄存器m 直接使用内存位置o 使用内存偏移位置V 直接使用内存位置i 使用立即整数值n 使用值已知的立即整数值g 使用任何可用的寄存器或内存位置。asm ("asm code" : "=a"(result) : "d":(data1) : , "c"(data2));data1存放到edx data2存放到ecx 结果存放到eax,然后再传送到resultasm("asm code" : "=r"(result) : "r"(data1) , "r"(data2));占位符%0将表示包含result值的寄存器,%1:data1,%2:data2h引用占位符:asm("imull %1 , %0" : "=r"(data2) : "r"(data1) , "0"(data2));

,使你疲倦的不是前面的高山,而是你鞋里的一粒沙子。

ATT学习笔记汇编之内联c语言

相关文章:

你感兴趣的文章:

标签云: