Hola, quisiera saber si es necesario y el porqué de hacer PUSH de SI, DI y DX dentro de la función si estos ya se realizan antes de invocarla.
Hola Paula!
Ambas secciones de código tienen funciones completamente distintas. Los PUSH dentro de la función se realizan para preservar el valor de los registros, requerimiento de letra. Es decir, una vez invocada la función, el valor de SI, DI, DX y de los demás registros no se debe modificar, por esa razón se guardan en el stack y se recuperan antes de retornar.
Por otro lado, los PUSH previos a la función lo que hacen es poner los parámetros en el stack. En este caso particular se realizan con SI, DI, y DX, pero podría haber sido con otros registros cualquiera. Por último, la función retira los parámetros del stack, por lo tanto los PUSH realizados previos a la función no ayudan en nada a preservar el valor de esos registros, es una función diferente.
Saludos,
Federico
Ambas secciones de código tienen funciones completamente distintas. Los PUSH dentro de la función se realizan para preservar el valor de los registros, requerimiento de letra. Es decir, una vez invocada la función, el valor de SI, DI, DX y de los demás registros no se debe modificar, por esa razón se guardan en el stack y se recuperan antes de retornar.
Por otro lado, los PUSH previos a la función lo que hacen es poner los parámetros en el stack. En este caso particular se realizan con SI, DI, y DX, pero podría haber sido con otros registros cualquiera. Por último, la función retira los parámetros del stack, por lo tanto los PUSH realizados previos a la función no ayudan en nada a preservar el valor de esos registros, es una función diferente.
Saludos,
Federico