这份
英文资料
GCC-Inline-Assembly-HOWTO 其实很深入浅出,面面俱到了,乍一看有点费劲,慢慢看还是挺好理解的
另有人专门翻译的上面的
文档,没细看,仅供参考
对于我个人,只有一个术语开始比较困惑:
clobbered registers,看了下翻译的文档也了然了。clobber,被重击的,被打击的,在这里引申出来的意思就是,被破坏了的寄存器。
个人理解,内嵌汇编已经是汇编了,所以编译器读到这段时,不会对它做任何处理,也就不会知道内嵌汇编中使用了什么寄存器,假如内嵌汇编使用了寄存器eax,编译器又在内嵌的汇编之前使用了eax,那后面就会产生不可预料的后果,因为编译器不知道它所用的eax寄存器的值已经在内嵌汇编中被重击了,所以内嵌汇编需要一个显式的clobberred register列表来告诉编译器,在我里面有使用这些寄存器,编译器你在编译上面的C语言时就不要用这些编译器了,不然会产生不可预知的后果