2013-05-06 69 views
0

如何在for循環中使用x86程序集來增加數組。如果循環(使用C++製造)看起來像:如何在x86程序集中增加數組?

for (int i = 0; i < limit; i++) 

從數組的值被放入寄存器然後改變的值被放置在一個單獨的陣列。我如何增加x86程序集中的每個數組(我知道C++比較簡單,但它是實踐工作),以便循環每次迭代使用的值,並將放入數組的值比前一次高一點?除了數組操作之外,循環中發生的細節並不重要,因爲我想知道如何在一般情況下完成此操作,而不是特定的情況?

+0

對不起,它不是C版本(如果這就是你的意思)...它是一個程序集版本,最好是以某種方式使用寄存器。謝謝 – user2283597 2013-05-06 17:51:14

回答

2

你寫在這裏的循環是:

xor eax, eax ; clear loop variable 
    mov ebx, limit 
loop: 
    cmp eax, ebx 
    je done 

    inc eax 
    jmp loop 

done: 
... 

我真的不明白你所說的「增加一個陣列」的意思。

如果你的意思是你想從一個數組加載某個值,操縱值和結果存儲在一個目標磁盤陣列,那麼你應該考慮一下:

裝入指針在ESI源陣列和edi中的目標指針。

mov esi, offset array1 
mov edi, offset array2 
mov ebx, counter 

loop: 
mov eax, [esi] 
do what you need 
move [edi], eax 

inc esi 
inc edi 

dec ebx 
jne loop 
+0

謝謝,在我的程序中使用幾個函數進行測試時,它確實可以完美工作。我只是想知道,'抵消'部分是做什麼的?它的目的是什麼......谷歌沒有真正提供任何相關的答案。 – user2283597 2013-05-06 19:44:18

+0

它告訴assmebler你想加載數組的地址,而不是引用它。不知道是否真的需要它,這是我上次做了一些真正的彙編編程後的幾天,所以我有點生疏。 :)順便說一句,如果你想從C函數中調用函數或者內聯地執行,必須注意保存edi和esi並在退出彙編代碼之前恢復它們。 – Devolus 2013-05-07 06:20:51