J'essaie de copier un tableau dans un autre tableau, mais l'ordre des éléments doit être inversé et affiché. Mon fichier programme se compile mais ne s'exécute pas et provoque une erreur d'arrêt Windows à chaque fois (boîte de dialogue Windows).
Je ne suis pas sûr de ce que je fais mal. S'il vous plaît donnez votre avis.Copie d'un tableau dans un autre tableau comme inversé et affichage dans l'assemblage
INCLUDE Irvine32.inc
.data
sarray DWORD 500h, 400h, 300h, 200h, 100h
darray DWORD 5 DUP(?)
.code
main PROC
mov eax, 0
mov esi, OFFSET sarray ;move first element address to esi
mov edi, OFFSET darray + SIZEOF darray - TYPE darray ;move last element address to edi
mov ecx, LENGTHOF sarray ;sets the counter in the reverseLoop
reverseLoop:
mov eax,sarray[esi] ;move 1st sarray element to eax
mov darray[edi],eax ;move 1st sarray element as last element on darray
call WriteInt
call Crlf
add esi, TYPE sarray
sub edi, TYPE darray
call WriteInt
loop reverseLoop
exit
main ENDP
END main
Modifier: Mon problème était que esi
et edi
avait l'adresse déjà ajouté (OFFSET sarray
), mais dans la boucle I a ajouté le nouveau départ (mov eax, sarray[esi]
).
Après le correctif, je devais ajouter une autre boucle pour imprimer la deuxième Darray (nouveau)
Avez-vous une condition pour quitter votre boucle? –
L'instruction 'loop' sur x86 décrémente' ecx' comme un compteur et se termine si elle va à zéro. Donc, ce n'est pas infini. – Jester
"Mon fichier programme s'arrête de fonctionner après la compilation." n'est pas une bonne description d'erreur, s'il vous plaît spécifier exactement ce qui se passe. En outre, utilisez un débogueur. – Jester