[2013][Febrero][Problema 1]

[2013][Febrero][Problema 1]

de Daniel Filgueiras Di Lorenzo -
Número de respuestas: 3

Hola, tengo un par de dudas en este ejercicio.

- La primera que me surgió, porque el proc timer() es far? Cual es el criterio para decidir si es near o far? Es algo que no entiendo como aplicarlo

- La segunda, es sobre el manejo de parámetros en el stack. Entiendo que dice que para el pasaje de para parámetros debe hacerse en el stack, pero por ejemplo, en la rutina timer utiliza dos registros y ambos los pushea al principio y les hace el pop al final; sin embargo en la rutina getDistance no pushea los registros que utiliza y recién al final del procedimiento hace: "pop DX, push AX push DX". Esto esta bien?

Por que es asi? No le encuentro sentido ni balance.

 Si alguien me ilustra :)


Muchas gracias, 

saludos


En respuesta a Daniel Filgueiras Di Lorenzo

Re: [Examen Marzo 2013] Problema 1

de Federico Rivero -

Estimado:

Ambas dudas creo que pasan en que el procedimiento timer es una interrupción. La diferencia de un procedimiento far o near es cómo se ensamblan las instrucciones 'call' y 'ret'. Si una rutina es far, el ret dentro de ella se va a ensamblar a la versión que retira IP y CS del stack, mientras que en una rutina near (lo más normal en los ejercicios), se retira únicamente el IP del stack.

Como las rutinas de interrupción se llaman guardando CS e IP en el stack, lo normal es ponerles 'FAR' (aunque cabe recordar que no se ejecuta una instrucción 'call' para llamarlas. 

Sobre el segundo punto, en las rutinas de interrupción es prácticamente obligatorio guardar el contexto, pues como son llamadas de forma no previsible por el programa, si afectan un registro que estaba en uso, el programa interrumpido con toda seguridad quedará corrupto (la única excepción es cuando el sistema es dedicado y se está seguro de que los valores sobreescritos no afectan al resto del programa). La rutina 'getDistances' es invocada por el programador, y como no se pide guardar el contexto, no lo hace. Por último, los pop y push finales no tienen que ver con el salvado del contexto, sino con la devolución de parámetros por stack.

Saludos, 

         Federico

En respuesta a Federico Rivero

Re: [Examen Marzo 2013] Problema 1

de Daniel Filgueiras Di Lorenzo -

Excelente Federico. Ultima duda, en getDistance las instrucciones "pop DX, push AX, push DX" lo que hace es pop DX (dir), push AX (result), push DX (dir) verdad?

Muchas gracias