2013-11-01 101 views
1

我有一段小代码,我不明白第3行是干什么的。任何人都可以帮我解释一下。非常感谢。你能帮我解释一下这段代码吗?[ASM]

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]

+0

看到我的回答,你的猜测是正确的。 –

回答

4

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

+1

+1我看到你的名字,然后头像,并立即想到*回家皮特,你是鸭* –

+0

谢谢皮特确认我的想法。但在[]内部仍然有点混淆。你能解释更多关于[ebx + eax * 2]的信息吗?例如:ebx保持值P,eax保持值100.所以上面的公式是[P + 100 * 2]。等于[P + 200]得到指针P + 200处的值还是等于[P + 100]和[P + 101],以获得指针P + 100和P + 101处的值。谢谢。 – akari

+0

X86是字节可寻址的,这意味着每个地址指向一个字节。所以如果你有一个从地址X开始的数组,那么第n个字节是在地址X + n处。希望这是有道理的。这是一个非常好的链接:http://denniskubes.com/2012/08/17/basics-of-memory-addresses-in-c/ –

3

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

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

相关问题