我想將array1 array2 ...連接到一個陣列如何快速:
.data
array1 db 0CFh, 0C2h, 0ABh, 01Bh, 0C1h, 007h, 0F7h, 06Dh, 0DAh, 0F2h, 0DCh, 03Ch....; about 2000 dup
...
array2 db 0BFh, 03Dh, 087h, 0F1h, 0A6h, 097h, 0A6h, 05Bh, 010h, 0F2h, 051h, 05Eh ...
.data ?
arrayOut dd ?
.code
invoke crt_memcpy, array, addr array1, sizeof array1
mov ecx, [arrayOut]
add ecx,sizeof array1
invoke crt_memcpy,dword ptr[ecx], addr array2, sizeof array2 ???
我也嘗試使用如下代碼:
mov eax, 0
mov ecx, sizeof array1 *2
mov edi, 0
mov esi, 0
L1:
mov al, [array1 esi * TYPE BYTE]
movsx eax, al
mov arrayOut[esi], eax
cmp ecx,esi
jbe GoOnNext
inc esi
loop L1
GoOnNext:
mov ecx, sizeof array2 *2
mov edi,0
L2:
mov bl, [array2 edi * TYPE BYTE]
movsx ebx, bl
mov arrayOut[esi], ebx
cmp ecx,edi
jbe nextstep
inc esi
add edi,1
loop L2
nextstep:
mov eax, arrayOut
但是如果陣列的大小很大,我會得到錯誤的結果。
uj5u.com熱心網友回復:
但是如果陣列的大小很大,我會得到錯誤的結果
有了這樣的宣告arrayOut dd ?,就沒有足夠的空間來復制了!基于提到兩個陣列都包含大約 2000 個位元組,您可以將其設為:
arrayOut db 4096 dup ?
接下來是復制記憶體塊的基本方法:
cld ; Makes the addresses ESI and EDI increment
mov edi, OFFSET arrayOut ; Destination
mov esi, OFFSET array1 ; Source
mov ecx, SIZEOF array1 ; Count
rep movsb
為了連接,然后復制第二個陣列,但不修改目標暫存器 EDI 中的值。這樣,第二個副本在第一個副本停止的地方繼續。
mov esi, OFFSET array2 ; Source
mov ecx, SIZEOF array2 ; Count
rep movsb
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/495919.html
