2015-09-26 1 views
2

Ceci est une question identique à la publication précédente. L'objectif est de prendre un tableau BYTE de 2, 4, 6, 8, 10 et de les insérer dans un tableau DWORD via une boucle pour les afficher. Ceci est ma dernière tentative.Lecture d'un tableau BYTE dans un tableau DWORD avec une boucle

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 

Des suggestions? Essayer de comprendre avec mon peu (jeu de mots) de la connaissance d'assemblage. Merci d'avoir lu.

+2

Celui-ci fonctionne: 'MOVZX eax, byte ptr [esi]' . – rkhb

+0

C'est en effet le cas. Merci! A ma connaissance, pourquoi 'byte ptr' fait-il fonctionner la déclaration? – caboose103

+0

L'assembleur doit savoir combien de [esi] doit être chargé dans "EAX", car il existe différentes instructions machine à cet effet. 'byte ptr' signifie: prendre un octet. – rkhb

Répondre

2

1ère solution suggérée par @rkhb est

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

Je voudrais ajouter un peu plus cette solution élégante:

cld 
xor eax, eax 
DAWG: 
lodsb 
stosd 
loop DAWG