AT&T 汇编语法格式

AT&T 汇编语法格式

            1.寄存器引用  Mov %eax, %ebx

            2.操作数顺序  mov %eax(),%ebx(目的).

            3.常数/立即数的格式

            使用立即数,,要在数前面加$, mov $4, %ebx

            符号常数直接引用, mov value, %ebx

            引用符号地址在符号前加$,  mov  $value, %ebx

            4.操作数的长度  movw  %ax, %bx

            5.绝对转移和调用指令(jmp/call)的操作数前要加上’*’作为前缀.

            6.远转移指令和远调用指令的操作码,汇编格式为”ljmp””lcall”.

              ljmp $section, $offset

              lcall  $section, $offset

            远程返回指令

              lret $stack_adujst

            7.寻址方式

            section:disp(base,index,scale)表示,计算方法是  base+index*scale+disp

 

AT& T嵌入汇编

_asm_(“asm statements” : outputs : inputs : registers-modified);

: outputs : inputs : registers-modified  序号为1---9.

几个例子

1._asm_(“ pushl %%eax /n/t”

      “movl $0,%%eax /n/t”

      “popl %eax”);

%%,因为GCC编译过程中,会有个中间层.

 

 

 

 

 

2.{register char_res;/

 asm(*push %%fs /n/t”

 “movw %%ax,%%fs /n/t”

 “ movb %%fs:%2,%%al /n/t”

  “pop %%fs”

 :”=a(_res):” 0” (seg),”m”(*(addr)));/

 _res;}

 

 

 

3.int main()

{

  int a1=10, b1=0;

  _asm_(“movl %1,%%eax;/n/r”

  “movl %%eax,%%ecx;;”

  :”=a”(b1)

  :”b”(a1)

:”%eax”);

printf(“Result :%d,%d//n”,a1,b1);

}

输出结果: Result: 10,10

 

“a” ,”b”,”c”,”d”分别表示寄存器eax,ebx,ecx,edx

“s””d”寄存器 esi,edi

“r”  任何寄存器

 

 

 

你可能感兴趣的:(AT&T 汇编语法格式)