AT&T格式汇编

来源:互联网 发布:微信微场景制作软件 编辑:程序博客网 时间:2024/05/17 03:51
阅读linux内核源代码时,底层的汇编语言格式使用的是AT&T。AT&T汇编语言格式和我们熟悉的intel的汇编很类似,但是也有很大的不同地方。现将常用的AT&T格式的语法列出如下。
1:寄存器应用
    寄存器前加%,如mov %eax, %ebx

2:操作数顺序
    操作数的排列从左到右为源到目的,如如mov %eax(源),%ebx(目的)

3:常数/立即数的格式
    立即数前加$,如mov$4, %ebx (把立即数4复制到ebx寄存器中)
    符号常数直接应用,如mov vaule, %ebx
    应用符号地址在符号前加$,如mov $value, %ebx

4:操作数的长度
    在指令后的符号表示
    b(byte), w(word), l(long), 如movw %ax, %bx

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

6:远程转移和调用指令为ljmp,lcall.(intel汇编则为jmp far, call far)
    ljmp $section, $offset
    lcall $section, $offset 
7.远程返回指令
    iret $stack_adjust
8:寻址方式
    section:disp(base, index, scale)-------base+index*scale+disp
    而intel格式为section:[base + index*scale +disp]
    AT&T格式                                             intel格式
    movl -4(%ebp), %eax                           mov eax, [ebp-4]
    movl arry(, %eax, 4), %eax                    mov eax, [arry+eax*4]
    movb $4, %fs:(%eax)                            mov fs:eax, 4
9:c语言中嵌入汇编的格式
    _asm_("asm statement": outputs :inputs : registers-modified);


原创粉丝点击