AT&T指令集

 

 

GAS中每个操作都是有一个字符的后缀,表明操作数的大小。

注意:GAL使用后缀“l”同时表示4字节整数和8字节双精度浮点数,这不会产生歧义因为浮点数使用的是完全不同的指令和寄存器。

 

 

操作数格式:

注:M[xx]表示在存储器中xx地址的值,R[xx]表示寄存器xx的值,这种表示方法将寄存器、内存都看出一个大数组的形式。

 

 

数据传送指令:

注:均假设栈往低地址扩展。

 

 

算数和逻辑操作地址:

 

 

特殊算术操作:

注:64位数通常存储为,高32位放在edx,低32位放在eax。

 

 

条件码:

条件码寄存器描述了最近的算数或逻辑操作的属性。

CF:进位标志,最高位产生了进位,可用于检查无符号数溢出。

OF:溢出标志,二进制补码溢出——正溢出或负溢出。

ZF:零标志,结果为0。

SF:符号标志,操作结果为负。

 

 

比较指令:

 

 

访问条件码指令:

 


跳转指令:

 

 

转移控制指令:(函数调用):

C声明GAS后缀大小(字节)charb1shortw2(unsigned) int / long / char* l4floats4doublel8long doublet10/12