HispaMSX

Re: [hispamsx] RE: ayuda con z88dk & assembler

2005-04-12 15:04:34
donde esta recogiendo el valor de 'p' para trabajar
con el?

¿esta en la posicion 2 de la memoria? 

alguien me lo puede explicar un poco please?


uchar inp(uint p)
{
   #asm
   ld hl,2
   add hl,sp
   ld c,(hl)
   inc hl
   ld b,(hl)
   in l,(c)
   ld h,0
   #endasm

Es cosa de como se pasan los parametros en los
lenguajes de alto nivel.

Hay varias convenciones al respecto. Pero dos de las
mas usadas son las llamadas C (CDECL)y Pascal, que
usan la pila para pasar los parametros.
En Pascal, los parametros se guardan en la pila de
izq. a derecha, es decir en el orden que aparecen. En
C, el compilador se toma el trabajo de almacenar el
ultimo parametro primero, para facilitarle las cosas a
los programadores que usan assembler supongo,jejeje.

En el ejemplo, HL se inicializa a 2 y se le suma SP.
El 2 que se suma en este caso es para saltear la
direccion de retorno de la rutina, que es lo ultimo
que se almaceno en la pila despues del CALL. A partir
de ahi, deberias tener los valores o bien los punteros
de los parametros segun sea el caso que sean por valor
o por referencia. 
Hay que tener en cuenta que siempre se almacenan
valores de 16 bits, aunque sean de 8 se almacenan como
de 16 bits, por el hecho que las instrucciones PUSH y
POP solo almacenan valores de 16 bits.

Pr ejemplo:

   void proc(int param1, int param2, ..., int paramN);

Los valores en la pila quedarian asi:

   (SP + 0 ) -> direccion de retorno
   (SP + 2 ) -> param1 
   (SP + 4 ) -> param2
    ....
   (SP +2*N) -> paramN

Espero que se entienda, sino tenes mas info en
internet buscando "convencion de llamada" o "calling
convention".

ACLARO QUE NO SE SI ASI FUNCIONARA EL Z88DK!!!!!!
DEBERIA...

Saludos

PD: Ahora que me doy cuenta, en los ejemplos que puse
sobre outp() y vpoke() me equivoque y estan como
llamadas PASCAL, habria que corregirlos para C.



Cæ


        

        
                
___________________________________________________________ 
250MB gratis, Antivirus y Antispam 
Correo Yahoo!, el mejor correo web del mundo 
http://correo.yahoo.com.ar

<Anterior en la conversación] Conversación actual [Siguiente en la conversación>