2016-02-26 2 views
0

У меня есть две задачи:ассемблере x86 Irvine

  • Печать длины 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) из ​​первого массива и скопировать их на второй, содержащий DWORDs (каждый элемент имеет 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 
Смежные вопросы