|
[这个贴子最后由tclfreegnu在 2005/03/27 09:09am 第 1 次编辑]
可能是汇编语言刚刚接触吧,感到看内联汇编代码很是吃力,有很多疑问。
A.关于寄存器堆的存储惯例
通用寄存器使用惯例
如:关于通用寄存器%eax习惯上是用来存放函数返回值的
那么%ebx, %ecx, %edx等,是否也存在这类似的使用惯例?
B.内联汇编
我只是略知其形式如下:
指令部分:输出部分:输入部分:损坏部分
但看懂代码还是很困难
如:
- asm("movl %4, %%eax;" CPUID
- "movl %%eax, %0; movl %%ebx, %1;
- movl %%ecx, %2; movl %%edx, %3"
- :"=m"(regs.eax),"=m"(regs.ebx),
- "=m"(regs.ecx), "=m"(regs.edx)
- :"g"(func)
- :"%eax", "%ebx", "%ecx", "%edx");
-
- 1)%0...%4具体指那些寄存器?
- 2)"movl %4, %%eax;" CPUID //怎么理解?
- 3):"g"(func)//什么意思?
- 4)"%eax", "%ebx", "%ecx", "%edx"//怎么理解?
- 那位朋友帮忙总体分析一下
- thanks
复制代码 |
|