2016-02-26 150 views
0

我有兩個任務:彙編語言的x86歐文

  • 打印ar2
  • 移動的長度從ar1的元素ar2,由1

遞增每一個項目,我需要幫助彙編語言x86 Irvine32。我必須做上面描述的這兩件事情。我得到了第一個正確的,但我有點在第二個失敗。你怎麼做到這一點?這是我到目前爲止有:

INCLUDE Irvine32.inc 

.data 

ar1 WORD 1,2,3 
ar2 DWORD 3 DUP(?) 

.code 
main PROC 

    mov eax, 0 
    mov eax, LENGTHOF ar2 

    mov bx, ar1 
    mov ebx, ar2 
    inc ebx 
    call DumpRegs 
    exit 
main ENDP 
END main 

回答

0

你必須從第一陣列讀的話(每件商品都有的sizeof 2),並將其複製到包含DWORD值,第二個(每個項目都有的sizeof 4):

主PROC

mov ecx, LENGTHOF ar2   ; ECX should result in '3' 
    lea esi, ar1     ; source array  - load effective address of ar1 
    lea edi, ar2     ; destination array - load effective address of ar2 
loopECX: 
    movzx eax, word ptr [esi]  ; copies a 16 bit memory location to a 32 bit register extended with zeroes 
    inc eax      ; increases that reg by one 
    mov dword ptr [edi], eax  ; copy the result to a 4 byte memory location 
    add esi, 2     ; increases WORD array 'ar1' by item size 2 
    add edi, 4     ; increases DWORD array 'ar2' by item size 4 
    dec ecx      ; decreases item count(ECX) 
    jnz loopECX     ; if item count(ECX) equals zero, pass through 
           ; and ... 
    call DumpRegs     ; ... DumpRegs 
    exit 
main ENDP 
END main