2012-04-15 139 views
-1

我一直在尋找通過一些代碼,發現2號線是困惑着我:混淆add命令

add -0x4(%esi,%ebx,4),%eax 
cmp %eax,(%esi,%ebx,4) 

我習慣了標準add src,dstcmp x1,x2,我真的不知道是什麼這些線實際上在做。

我相信,它與GCC

+0

如果您編輯問題以包含您正在使用的特定彙編程序的更多詳細信息,將會有所幫助。我不認識這個語法,但我必須補充一點,從我用匯編語言開始就已經有一段時間了。 – 2012-04-15 03:38:25

回答

2

這是使用Base +(索引*比例)+位移尋址模式編譯。至少,我認爲是。我不熟悉AT & T語法。我認爲英特爾的語法將是:

add eax,[esi + ebx*4 - 4] 
cmp [esi + ebx*4],eax 

這看起來像它是索引到一個整數數組(4字節值)。試想一下,在C想從一些數組元素的值與總,是這樣的:

int a[100]; 
int i = 10; 
int total = 0; 
total += a[i-1]; 

現在,讓esi持有數組的地址,ebx持有i值,eax舉行33.值你會得到:

add eax,[esi + ebx*4 - 4] 

比較指令測試,看看結果(eax)等於數組中的下一個值。在C示例中,這相當於比較totala[i]

+1

你是對的。 AT&T語法基礎:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html – DCoder 2012-04-15 05:24:02