代码之家  ›  专栏  ›  技术社区  ›  Skeen

关于AT&T x86语法设计的问题

  •  18
  • Skeen  · 技术社区  · 15 年前
    1. 有人能告诉我为什么a t&t语法中的每个常量前面都有一个“$”吗?
    2. 为什么所有寄存器都有“%”?
    3. 这是让我做很多蹩脚的打字的又一次尝试吗?
    4. 此外,我是唯一一个发现: 16(%esp) 真的违反直觉 [esp+16] ?
    5. 我知道它编译的是同一个东西,但是为什么有人不需要输入大量的“$”和“%”?-为什么GNU选择此语法作为默认语法?
    6. 另一件事,为什么AT&AMT语法中的每个指令前面都有一个:L?-我知道它适用于操作数大小,但是为什么不让汇编程序解决这个问题呢? (我有没有想过要对不那么大的操作数进行movl?)
    7. 最后一件事:为什么MOV的论点是颠倒的?

    不是吗? 更多 合乎逻辑的:

    eax = 5
    mov eax, 5
    

    其中AT&T是:

    mov 5, eax
    5 = a (? wait what ?)
    

    注: 我不是想捣乱。我只是不理解他们所做的设计选择,我想知道他们为什么做他们所做的。

    4 回复  |  直到 10 年前
        1
  •  26
  •   Thomas Pornin    15 年前

    xmm4 %xmm4

    mov  [esp], 10
    

    mov  byte ptr [esp], 10
    

    movb   $10, (%esp)
    

    mov   %al, (%ebx)
    

        2
  •  9
  •   Jens Björnhager    15 年前

        3
  •  7
  •   ninjalj    10 年前

    [foo]

    #

    * @ $

    %x x %3+1 %4

    b CLR CLRB l w f d q

    Last thing: why are the mov arguments inverted?
    


        4
  •  2
  •   user1254127    11 年前

    推荐文章