如何在for循環中使用x86程序集來增加數組。如果循環(使用C++製造)看起來像:如何在x86程序集中增加數組?
for (int i = 0; i < limit; i++)
從數組的值被放入寄存器然後改變的值被放置在一個單獨的陣列。我如何增加x86程序集中的每個數組(我知道C++比較簡單,但它是實踐工作),以便循環每次迭代使用的值,並將放入數組的值比前一次高一點?除了數組操作之外,循環中發生的細節並不重要,因爲我想知道如何在一般情況下完成此操作,而不是特定的情況?
如何在for循環中使用x86程序集來增加數組。如果循環(使用C++製造)看起來像:如何在x86程序集中增加數組?
for (int i = 0; i < limit; i++)
從數組的值被放入寄存器然後改變的值被放置在一個單獨的陣列。我如何增加x86程序集中的每個數組(我知道C++比較簡單,但它是實踐工作),以便循環每次迭代使用的值,並將放入數組的值比前一次高一點?除了數組操作之外,循環中發生的細節並不重要,因爲我想知道如何在一般情況下完成此操作,而不是特定的情況?
你寫在這裏的循環是:
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
謝謝,在我的程序中使用幾個函數進行測試時,它確實可以完美工作。我只是想知道,'抵消'部分是做什麼的?它的目的是什麼......谷歌沒有真正提供任何相關的答案。 – user2283597 2013-05-06 19:44:18
它告訴assmebler你想加載數組的地址,而不是引用它。不知道是否真的需要它,這是我上次做了一些真正的彙編編程後的幾天,所以我有點生疏。 :)順便說一句,如果你想從C函數中調用函數或者內聯地執行,必須注意保存edi和esi並在退出彙編代碼之前恢復它們。 – Devolus 2013-05-07 06:20:51
對不起,它不是C版本(如果這就是你的意思)...它是一個程序集版本,最好是以某種方式使用寄存器。謝謝 – user2283597 2013-05-06 17:51:14