Código
segment .text global _change_values _change_values: enter 0,0 push ebx mov edx, dword [ebp+8] mov ebx, dword [edx] ; ebx = primer parámetro mov edx, dword [ebp+12] mov ecx, dword [edx] ; ecx = segundo parámetro ; mov dword [ebp+8], ecx >> Intercambiador v1 NO FUNCIONA ; mov dword [ebp+12], ebx mov edx, dword [ebp+8] ; Intercambiador v2 mov [edx], ecx mov edx, dword [ebp+12] mov [edx], ebx pop ebx leave ret
Esto me plantea otra duda. ¿Por qué el intercambiador v1 no funciona? Sé que le intercambiador v2 si que debe funcionar perfectamente (de hecho, funciona ), pero no entiendo porque en la primera versión que hice no puede funcionar...
Gracias por toda su ayuda!!
PD.: Sé que he puesto dword de sobra, pero aun quitándolos del intercambiador no funciona...
Aquí está la versión reducida (sinceramente, no sé si se puede optimizar más xD)
Código
segment .text global _change_values _change_values: enter 0,0 push ebx ; void intercambiar(int* valor_a, int* valor_b); mov eax, dword [ebp+8] ; eax = value_a mov ebx, dword [ebp+12] ; ebx = value_b mov ecx, [eax] ; ecx = *value_a mov edx, [ebx] ; edx = *value_b mov [eax], edx ; *valor_a = edx >> *valor_a = *valor_b mov [ebx], ecx ; *valor_b = ecx >> *valor_b = *valor_a pop ebx leave ret