我一直在尋找通過一些代碼,發現2號線是困惑着我:混淆add命令
add -0x4(%esi,%ebx,4),%eax
cmp %eax,(%esi,%ebx,4)
我習慣了標準add src,dst
和cmp x1,x2
,我真的不知道是什麼這些線實際上在做。
我相信,它與GCC
我一直在尋找通過一些代碼,發現2號線是困惑着我:混淆add命令
add -0x4(%esi,%ebx,4),%eax
cmp %eax,(%esi,%ebx,4)
我習慣了標準add src,dst
和cmp x1,x2
,我真的不知道是什麼這些線實際上在做。
我相信,它與GCC
這是使用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示例中,這相當於比較total
到a[i]
。
你是對的。 AT&T語法基礎:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html – DCoder 2012-04-15 05:24:02
如果您編輯問題以包含您正在使用的特定彙編程序的更多詳細信息,將會有所幫助。我不認識這個語法,但我必須補充一點,從我用匯編語言開始就已經有一段時間了。 – 2012-04-15 03:38:25