2013-08-29 239 views
0

這是4行彙編代碼。我試圖理解他們。 (這是英特爾了Syntex)彙編代碼的說明

– mov eax, ebx 
    – mov eax, [ebx] 
    – mov eax, [ebx+ecx*X] (X=1, 2, 4, 8) 
    – mov eax, [ebx+ecx*X+Y] (Y= one byte, 0-255 or 4 bytes, 0-2^32-1) 

1)第一行會複製任何在EBX寄存器的值EAX寄存器。 2)第二行將查找ebx寄存器中的任何值,並將其作爲內存地址發送到該內存地址。它會將該內存地址中的值複製到eax寄存器中。 3)第三行將獲得ebx寄存器的值,將其視爲內存地址。向它添加ecx * X並獲得一個新地址,然後轉到這個新地址並獲取該值並將其複製到eax。 4)我不能得到第四行。

任何人都可以檢查,我對指令的理解是正確的嗎?如果他們不正確,請解釋我。也解釋第四行。

在此先感謝。

+0

沒有冒犯,但爲什麼不呢?第4行與第2行和第3行相同。您將一堆東西加在一起形成一個地址。 – harold

回答

0

1-3)

你的假設看起來是正確的我。

4)我不能得到第四行。

除了添加絕對偏移量之外,它和第三個一樣。例如:

mov eax,[ebx+ecx*4+arrays] 

arrays: 
array1: dd 0,1,2,3 
array2: dd 3,2,1,0 

如果設置ebx 0你讀的array1ecx:th元素。如果您將ebx設置爲16(4 * sizeof(dword)),您會閱讀array2ecx:th元素。

+0

謝謝,解釋幫助我理解。 – narayanpatra

0

用於在x86偏移計算的通式爲,

Offset = Base + (Index * Scale) + Displacement 

其中,在實施例中,ebx是基礎,ecx是索引和X是規模和Y是位移。你可以認爲(3)和(4)是一樣的,其中(3)正好(4)與Y等於0.