Assembly Segments in opcodes

后端 未结 2 1083
小蘑菇
小蘑菇 2021-02-04 12:44

I noticed that in Assembly segments are used in opcodes.

Example:

MOV DWORD PTR SS:[EBP-30],30

I think that \"PTR SS:\" is used to spec

相关标签:
2条回答
  • 2021-02-04 12:51
    MOV DWORD PTR SS:[EBP-30],30
    

    There are two separate modifiers here, DWORD PTR and SS:.

    The first one tells us that we want to store a word at the address pointed to. This is needed when the assembler cannot tell that from the operands of the instruction. Here 30 could just as well be a byte to store.

    The SS: is a segment prefix, saying that we want to use an address relative to the stack segment. In this case it isn't strictly needed, because that is the default when using the ESP or EBP registers. So the second version of the instruction is identical to the first one.

    Had you used EBX instead of EBP there would have been a difference!

    0 讨论(0)
  • 2021-02-04 12:57
    • SS is Stack Segment
    • DS is Data Segment
    • PTR - pointer. It's an address.

    When you do

    mov ax, some_variable
    

    you are really substituting this form "mov ax, ds:[pointer_to_variable]"

    In case of SS, you are accessing the value not from DS, but from the stack instead :). Think of segment registers as banks. Data comes from DS, Stack data from SS, Code data from CS, Extra segment is ES.

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