Ensamblador - como pasar parametros a una funcion de C desde ASM

 
Vista:

como pasar parametros a una funcion de C desde ASM

Publicado por Hector (2 intervenciones) el 25/02/2007 14:26:45
Buenas.Estoy haciendo un sistema operativo desde 0,basandome en otros trabajos como el cottontail de frank millea y otros....Ya tengo implementado el bootloader,que se ha de escribir en la MBR,un modulo en ensamblador que llama al main y a otros procedimientos de un programa en C(llamemosle stage1 al asm y kernel al de C),los archivos include y tal....
Bien.En un determinado momento, el kernel llama a una parte del stage1 con la que se puede introducir caracteres desde el teclado(a modo de prompt) utilizando la getkey de la bios (mov ah,0x00, interrupcion 16h) Si el caracter es enter,salta a una etiqueta para que termine,si no lo es metemos el caracter(que se encuentra en teoria en al) en di,incrementamos di y saltamos al principio del procedimiento para que lo haga hasta apretar enter.

[global _getstring]
_getstring:
push bp
push di ;guardamos di
push bx

mov bp,sp
mov si,di ;metemos di en si
sigcar:

mov ah,0x00 ;getkey de la bios
int 0x16 ;interrupcion del teclado
cmp al,0xd ;el caracter es enter?
jz fin_getstring ;si es asi terminamos
call _putchar ;si no,llamamos a putchar para q lo muestre por pantalla
mov [di],al ;metemos el caracter en di
inc di
jmp sigcar

fin_getstring:

push word di
[extern _devcom]
call _devcom
add sp,8

pop bx
pop di
pop bp
ret

Como vereis en el codigo que aqui os dejo,al terminar(si es enter) salta a fin_getstring.El problema es que llevo unos dias peleandome con di,[di],al y su p*ta madre para que me envie a la funcion externa de C _devcom la cadena que en teoria se ha ido almacenando en di.
No me lo hace(evidentemente, si no no os diria nada).
Como lo hago???En que registro se guarda la cadena??Si esta mal el codigo,como estaria bien??Con que tipo de C tengo que declarar el parametro de _devcom para que me lo coja???
Ayudarrrrrrr!!!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder