你能帮我解释一下这段代码[ASM]

时间:2013-11-01 06:04:17

标签: assembly x86

我有一段小代码,我无法理解第3行的作用。任何人都可以帮我解释一下。非常感谢。

mov     ebx, pointer1   //Assign of pointer pointer1 value to ebx
movzx   eax, byte ptr[esi]   //Get value from pointer address esi and assign to eax
mov     dx, [ebx + eax * 2]  //??? Dont know what it does
mov     [edi], dx   

我想,如果[ebx]是一个字节数组,那么该行将会array[eax_value]array[eax_value+1]

2 个答案:

答案 0 :(得分:4)

ebx将指针值保存到pointer1。 eax用于抵消它。您从pointer1获取第n个16位值,其中n由读入eax的值确定。

答案 1 :(得分:3)

Pointer1是指向short int(16位)数组的指针。 esi指向某个字节值,该值是数组中的索引。

因此指针被加载到ebx,然后索引被加载到eax并乘以2(因为16位数据大小)并作为偏移量添加到数组指针。 数组中的值将复制到edi所指向的位置。