Confusing add command in x86 assembly

为君一笑 提交于 2019-12-02 13:20:00

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].

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!