2015-09-26 59 views
2

這是一個與以前的帖子相同的問題。我們的目標是獲取2,4,6,8,10的BYTE數組,並通過LOOP將它們插入到DWORD數組中以顯示它們。這是我最近的嘗試。將一個BYTE數組讀入一個帶有循環的DWORD數組

INCLUDE Irvine32.inc 

.data 

Array1 BYTE 2,4,6,8,10 
Array2 DWORD 5 dup(0) 

.code 
main PROC 


mov esi, OFFSET Array1 ;esi = byteArray 
mov edi, OFFSET Array2 ;edi = dwordArray 
mov ecx, 5    ;counter of loop 


DAWG: 
    mov eax, [esi] ;attempting to use movzx causes errors 
    mov [edi], eax 
    inc esi 
    add edi, 4 
    loop DAWG 

有什麼建議嗎?試圖用我的裝配知識(雙關語意圖)來弄明白。謝謝閱讀。

+2

這一個工程:'MOVZX EAX,字節PTR [ESI]' 。 – rkhb

+0

的確如此。謝謝!據我所知,爲什麼'byte ptr'使聲明有效? – caboose103

+0

彙編程序必須知道有多少[esi]要加載到'EAX'中,因爲爲此目的有不同的機器指令。 'byte ptr'表示:取一個字節。 – rkhb

回答

2

由@rkhb建議的第一個解決方案是

DAWG: 
movzx eax, byte ptr [esi] 
mov [edi], eax 
inc esi 
add edi, 4 
loop DAWG 

我想補充這稍微更優雅的解決方案:

cld 
xor eax, eax 
DAWG: 
lodsb 
stosd 
loop DAWG