2016-12-28 120 views
-4

这条指令是做什么的? 我不明白[ebx + 0x18]它在做什么? COS EBX是不是这是一个寄存器,所以请大家帮我一个地址^^mov [ebx + 0x18] ecx做什么?

+1

EBX可以包含地址... –

+0

是它增加EBX中的地址? – assemblerMan

+0

它正在访问'ebx'所保存的内存地址,偏移量为'24'。 –

回答

3

我假设指令是mov [ebx+0x18], ecx

这是英特尔语法,其中方括号表示内部值是取消引用,就好像它是一个指针。在这种情况下,将恒定偏移量0x18添加到存储在ebx寄存器中的值中,然后将其解释为内存地址,然后解除引用。

指令因此拷贝存储在ecx到存储器中的值由ebx+0x18指向。

注意,ebxecx寄存器的实际内容是改性仅在地址ebx+0x18存储器。

3

mov指令是这样的:

mov <destination>, <source> 

因此要设置寄存器EBX相同的值作为ECX,你会:

mov ebx, ecx 

围绕一个操作数的括号表示使用解引用,即查看特定寄存器中的地址,并将其用作源或目的地。要设置在内存的地方在指出由EBX到ECX的值:

mov [ebx], ecx 

最后,你可以提领的时候做一些基本的算术。所以,从这个地方通过EBX设置的地方0x18(或24)个字节着指着到ECX的值:

mov [ebx + 0x18], ecx 
+0

是字节或位中的0x18偏移量? – assemblerMan

+0

@assemblerMan都不。 0x18只是一个偏移量,所以它只是一个数字,当被添加到一个地址时,产生一个地址。正如所解释的,“X + O”产生由* X *和* O *之和给出的地址(例如0x100 + 0x18 = 0x118)。现在在x86架构中代表什么地址?一点,一个字节,一个字? –

+0

@assemblerMan正如Margaret解释的那样,它确实只是增加了数字。在这种情况下,我认为可以说地址指向* byte *位置,因此从EBX指向的位置前面的字节偏移量是24 *字节*。 –

相关问题