What do the dollar ($) and percentage (%) signs represent in x86 assembly?

后端 未结 5 1195
耶瑟儿~
耶瑟儿~ 2020-12-15 03:01

I am trying to understand how the assembly language works for a micro-computer architecture class, and I keep facing different syntaxes in examples:

sub $48,         


        
相关标签:
5条回答
  • 2020-12-15 03:32

    Yes, "32(%esp)" indicates an offset of 32 from %esp.

    0 讨论(0)
  • 2020-12-15 03:41

    Compared to Intel syntax, AT&T syntax has many differences

    • $ signifies a constant (integer literal). Without it the number is an absolute address
    • % denotes a register
    • The source/destination order is reversed
    • () is used for memory reference, like [] in Intel syntax

    So the above snippet is equivalent to

    sub esp, 48         ; esp -= 48
    mov [esp+32], eax   ; store eax to the value at the address `esp + 32`
    
    0 讨论(0)
  • 2020-12-15 03:42

    As @Necrolis said, that's written in AT&T syntax. It means:

    subtract 48 from the register esp (the stack pointer).
    store the contents of eax to the four bytes starting at (esp + 32).
    
    0 讨论(0)
  • 2020-12-15 03:55

    This is AT&T syntax for x86. In AT&T % generally denotes a register while $ is reserved for immediates. If you omit th $ the assembler would interpret the 48 as an address.

    0 讨论(0)
  • 2020-12-15 03:58

    Thats not Intel syntax, its AT&T syntax, also called GAS syntax.

    the $ prefix is for immediates (constants), and the % prefix is for registers (they are required1).

    For more about AT&T syntax, see also the [att] tag wiki.


    1 Unless the noprefix option is specified, see here & here. But usually noprefix is only used with .intel_syntax noprefix, to get MASM-like syntax.

    0 讨论(0)
提交回复
热议问题