浏览代码

arreglo al profesor

David 11 年之前
父节点
当前提交
fcfa78778e
共有 1 个文件被更改,包括 12 次插入14 次删除
  1. 12 14
      machete/machete.tex

+ 12 - 14
machete/machete.tex

@@ -379,13 +379,15 @@ ahiVaElVector:
 	push rbp
 	mov rbp, rsp
 	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 r15, [rsp] ;guardo mi inicio de memoria
 
+	xor rcx,rcx
 .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
 	je .cicloAtras
 	mov rdi, rdx
@@ -393,7 +395,6 @@ ahiVaElVector:
 	jmp .cicloAdelante
 
 	push NULL							; pongo el NULL
-	mov r15, rcx						; lo resguardo para el final
 
 .cicloAtras:
 	lea rdx, [rdi + OFFSET_N]			; RDX = &(numero->n)
@@ -401,21 +402,18 @@ ahiVaElVector:
 	mov rdi, [rdi + OFFSET_ANTERIOR]
 	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
 	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 rbp
 	ret
 \end{lstlisting}
-\end{document}
+\end{document}