El siguiente código fuente cambia la posición de todos los elementos de un array de 100 elementos, el array estará compuesto por 100 elementos de números enteros.
Para probar el código tenéis que haber creado el array A y haber introducido los cien elementos que ocuparán desde la posición de memoria “A” a la posición de memoria
A + (100 elementos * 4 bytes), 4 bytes es lo que ocupa cada número entero.
Tendremos dos registros para conocer la posición en memoria en la que se encuentra el bucle (ebx,edx), y otros dos registros para hacer el intercambio de los valores (eax,ecx).
El código está hecho para la arquitectura (x86-64).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mov ebx, dword[A] ; posición inicial de A mov edx, dword[A+99*4] ; posición del último elemento de A Bucle: cmp ebx, edx ; cuando tengan la misma posición ; o se cruce el bucle jge final mov eax, dword[A+ebx] ;carga la posición de memoria mov ecx, dword[A+edx] ;carga la posición de memoria mov dword[A+edx], eax ;cambia el valor mov dword[A+ebx], ecx ;cambia el valor add ebx, 4 ; aumenta la posición “inicial” sub edx, 4 ; disminuye la posición “final” jmp Bucle final: |