1

我有一段小代码,我无法理解第 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]

4

2 回答 2

4

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

于 2013-11-01T06:13:28.040 回答
3

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

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

于 2013-11-01T09:34:09.230 回答