|
@@ -379,13 +379,15 @@ ahiVaElVector:
|
|
|
push rbp
|
|
push rbp
|
|
|
mov rbp, rsp
|
|
mov rbp, rsp
|
|
|
push r15
|
|
push r15
|
|
|
- sub rsp, 8
|
|
|
|
|
|
|
+ sub rsp, 8 ;esto podria eliminarlo porque re-alineo antes de el call.
|
|
|
|
|
|
|
|
- mov rcx, 0 ; contador de elementos
|
|
|
|
|
mov rdx, [rdi + OFFSET_SIGUIENTE] ; asumo la lista no esta vacia
|
|
mov rdx, [rdi + OFFSET_SIGUIENTE] ; asumo la lista no esta vacia
|
|
|
|
|
+ mov r15, [rsp] ;guardo mi inicio de memoria
|
|
|
|
|
|
|
|
|
|
+ xor rcx,rcx
|
|
|
.cicloAdelante:
|
|
.cicloAdelante:
|
|
|
- inc rcx
|
|
|
|
|
|
|
+ inc rcx ;dejo rcx aca porque hace un loop y
|
|
|
|
|
+ ;sino deberia hacer cmp por null en el prox ciclo
|
|
|
cmp rdx, NULL
|
|
cmp rdx, NULL
|
|
|
je .cicloAtras
|
|
je .cicloAtras
|
|
|
mov rdi, rdx
|
|
mov rdi, rdx
|
|
@@ -393,7 +395,6 @@ ahiVaElVector:
|
|
|
jmp .cicloAdelante
|
|
jmp .cicloAdelante
|
|
|
|
|
|
|
|
push NULL ; pongo el NULL
|
|
push NULL ; pongo el NULL
|
|
|
- mov r15, rcx ; lo resguardo para el final
|
|
|
|
|
|
|
|
|
|
.cicloAtras:
|
|
.cicloAtras:
|
|
|
lea rdx, [rdi + OFFSET_N] ; RDX = &(numero->n)
|
|
lea rdx, [rdi + OFFSET_N] ; RDX = &(numero->n)
|
|
@@ -401,21 +402,18 @@ ahiVaElVector:
|
|
|
mov rdi, [rdi + OFFSET_ANTERIOR]
|
|
mov rdi, [rdi + OFFSET_ANTERIOR]
|
|
|
loop .cicloAtras
|
|
loop .cicloAtras
|
|
|
|
|
|
|
|
- ; OJO: asumimos que no hace falta alinear la pila a 16 bytes.
|
|
|
|
|
- ; Pero es muy importante tenerlo en cuenta!
|
|
|
|
|
- ; Se puede resolver +/- facil al menos de 2 maneras:
|
|
|
|
|
- ; A) un contador que cuenta la cantidad de PUSHs para analizar luego la paridad
|
|
|
|
|
- ; B) haciendo RSP multiplo de 16 con "and rsp, 0xFFFFFFFFFFFFFFF0"
|
|
|
|
|
|
|
+
|
|
|
|
|
+ ;alineo la pila con matemagicas
|
|
|
|
|
+ and rsp, 0xffffffffffffffffff0 ;son 15 F's. 15x4=60 bits
|
|
|
|
|
+
|
|
|
mov rdi, rsp
|
|
mov rdi, rsp
|
|
|
call dameVector
|
|
call dameVector
|
|
|
|
|
|
|
|
- inc r15 ; R15++ por el NULL
|
|
|
|
|
- lea r15, [r15*8] ; R15 = # bytes del vector con el NULL
|
|
|
|
|
- add rsp, r15 ; saco el vector de la pila
|
|
|
|
|
|
|
+ mov rsp, r15 ;aca tenia mi rsp despues de los push
|
|
|
|
|
|
|
|
- add rsp, 8
|
|
|
|
|
|
|
+ add rsp, 8 ;des "alineo"
|
|
|
pop r15
|
|
pop r15
|
|
|
pop rbp
|
|
pop rbp
|
|
|
ret
|
|
ret
|
|
|
\end{lstlisting}
|
|
\end{lstlisting}
|
|
|
-\end{document}
|
|
|
|
|
|
|
+\end{document}
|