Duda Assembler Diciembre 2017

Duda Assembler Diciembre 2017

de Fernando Andres Tomeo Lussich -
Número de respuestas: 3

Buenas, mirando la solucion me surge la siguiente duda : 

https://eva.fing.edu.uy/pluginfile.php/44683/mod_folder/content/0/2017/solExAC201712.pdf?forcedownload=1


Luego del llamado recursivo en el codigo de la solucion, hace ADD CX, DX

CALL contarArquiChirimbolos 

POP DX 

ADD CX, DX

La duda es, no deberia primero hacer un pop CX, como sabe cual valor tiene CX? por lo que tengo entendido el valor de los registros no se conserva a no ser que se guarde en la pila, el registro CX sin hacer un pop de la pila, que valor tiene?

Se entiende la duda? saludos y gracias.




En respuesta a Fernando Andres Tomeo Lussich

Re: Duda Assembler Diciembre 2017

de Federico Rivero -

Estimado,

Primero notar que CX se preserva en el procedimiento 'contarArquiChirimbolos' (ver que se hace PUSH al entrar, POP al salir), por lo tanto, la llamada recursiva no afecta el valor del registro CX. El mismo es igualado a 0 (XOR CX, CX) algunas líneas antes, por lo tanto luego de la primer llamada recursiva, CX vale 0.

Saludos,

       Federico

En respuesta a Federico Rivero

Re: Duda Assembler Diciembre 2017

de Fernando Andres Tomeo Lussich -

Federico, gracias por las respuesta, de todas maneras no me queda claro cuando vuelve de la recursion (cuando se hace el ret y sigue desde la siguiente linea dsps del primer llamado de la recursion) como sin hacer un pop de la pila, se conoce el valor del registro CX.

Entiendo que el valor de CX se preserva en la pila, pero no me queda claro como vuele a obtener su valor antes del llamado si no se hace un pop de la pila para recuperarlo

Se entiende mi duda?

Gracias.

En respuesta a Fernando Andres Tomeo Lussich

Re: Duda Assembler Diciembre 2017

de Federico Rivero -

Fijate que 3 líneas antes de hacer el RET, se recupera el valor de CX de la pila (POP CX). El valor de CX no cambia luego de ejecutar el RET, por lo tanto, al regresar de la rutina ese valor recuperado de la pila sigue en CX.

Saludos,

        Federico