Ensamblador - Necesito ayuda para incluir Ensamblador en C

 
Vista:

Necesito ayuda para incluir Ensamblador en C

Publicado por Connie (1 intervención) el 26/05/2005 03:16:17
Necesito ver como puedo incluir algun tipo de codigo de ensamblador en C para incrementar el pulso de reloj xq estoy enviando informacion a puerto paralelo y esta demasiado lento!
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
Imágen de perfil de masklet63

RE:Necesito ayuda para incluir Ensamblador en C

Publicado por masklet63 (2 intervenciones) el 01/06/2005 01:13:04
Ejemplo de como incluir ensamblador en C.
char Tecla(void)
{
char Resultado;
asm{
mov ah,00h
int 16h
mov Resultado,ah
}
return(Resultado);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Pregunta

Publicado por Jack (1 intervención) el 29/06/2005 21:54:55
De acuerdo entonces para incluirlo solo se pone entre llaves con asm el codigo ensamblador, y para compilarlo debe incluirse alguna otra libreria ????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pregunta

Publicado por Ge-ergon (46 intervenciones) el 30/06/2005 07:47:30
Hola!

En realidad la manera mas sencilla de combinar assembler con C/C++ es utilizando la directiva asm, como nos muestra el ejemplo de la nota de masklet63 (01/06/2005). El ejemplo descrito es especificamente para compiladores de Borland, las herramientas de MS utilizan de igual manera al GCC las funciones _asm() ó __asm(). Donde se pasa por párametro los opcodes.

El uso de estas directivas de compilador o funciones NO requieren de alguna declaración, incluso asm es una palabra reservada.

Tambien existen otra manera, que es relizar la función en ensamblador utilizando por ejemplo Tasm o Masm y llamarla desde alguna herramienta de alto nivel.
Es decir, algunos prefieren enlazar el archivo externo en asm(.obj) en una aplicación en C, que utilizar Basm.

Algunos prefieren esta forma por que algunas cosas son más flexibles, al uso de diretivas como asm se le llama inline assembler, o conocido en compiladores de Borland como BASM. Se debe decir que codificar asm en BASM es alguna veces distinto a implementar una función para Tasm, por ejemplo.

De todos modos te dejo un ejemplo (Borland) para relizar enlaces entre Asm y C:

/* C CODE */

/* The C code */
extern int ProcName(int, int);

main() {
printf("The Result is = %i", ProcName(parm1,parm2));
}

;ASM CODE

.MODEL Small
.CODE
PUBLIC ProcName
ProcName PROC
push bp
mov bp,sp
mov ax,[bp+4] ; first parameter,
mov dx,[bp+6] ; second parameter

....Aqui lo que quieras

; C usa dx:ax como variables de retorno (RC)
pop bp
ret
ProcName ENDP
END

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar