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