Confusing add command in x86 assembly

前端 未结 1 365
余生分开走
余生分开走 2021-01-29 06:25

I was looking through some code and found 2 lines that perplexed me:

add    -0x4(%esi,%ebx,4),%eax
cmp    %eax,(%esi,%ebx,4)

I am accustomed to

相关标签:
1条回答
  • 2021-01-29 06:46

    That's using the Base + (Index * Scale) + Displacement addressing mode. At least, I think so. I'm not real familiar with the AT&T syntax. I think the Intel syntax would be:

    add eax,[esi + ebx*4 - 4]
    cmp [esi + ebx*4],eax
    

    This looks like it's indexing into an array of integers (4-byte values). Imagine in C that you want to add the value from some array element to a total, like this:

    int a[100];
    int i = 10;
    int total = 0;
    total += a[i-1];
    

    Now, make esi hold the address of the array, ebx hold the value of i, and eax hold the value 33. You'd get:

    add eax,[esi + ebx*4 - 4]
    

    The comparison instruction is testing to see if the result (in eax) is equal to the next value in the array. In the C example, that would be equivalent to comparing total to a[i].

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