SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: sneider en Sábado 15 de Mayo de 2004, 11:38

Título: Ensamblador + C
Publicado por: sneider en Sábado 15 de Mayo de 2004, 11:38
Wenas, necesito saber como puedo meter este codigo de ensamblador en un compilador tipo Turbo C   o   Dev-C++ . Que hay q hacer para que compile sin errores? Que es lo ke hay q poner para ke compile ensamblador? gracias.
este es el codigo :

; Syntax:  CAPS
CSEG           SEGMENT
               ASSUME  cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
               ORG     100h
START:         mov     ax,40h          ;ROM Seg
               mov     es,ax
               mov     ax,es:[17h]     ;Cur Stat
               or      al,01000000b    ;Caps ON
               mov     es:[17h],ax
EXIT:          mov     al,RC           ;ErrorLevel
               mov     ah,4Ch          ;Return/Exit
               int     21h             ;DOS
               ret
; Data & Constants
RC             DB      0
CSEG           ENDS
               END     START
;*** End of Program ***
Título: Re: Ensamblador + C
Publicado por: Ruben3d en Sábado 15 de Mayo de 2004, 14:14
Hola.

En este post

http://foros.solocodigo.com/index.php?showtopic=6882 (http://foros.solocodigo.com/index.php?showtopic=6882)

aparecen funciones de C con código ensamblador. Está hecho para Visual C++ pero no creo que difiera mucho para los compiladores que has mencionado.

Un saludo.

Ruben3d
Título: Re: Ensamblador + C
Publicado por: Martin Candurra en Domingo 16 de Mayo de 2004, 15:30
Si no me equivoco el Dev C++ está basado en GCC, por lo que tendrás que usar la sintaxis AT&T y no intel.
Te dejo un link  a un artículo de Inline Assembly en GCC:
http://routix.sourceforge.net/docs/inline/inline.html (http://routix.sourceforge.net/docs/inline/inline.html)
Título: Re: Ensamblador + C
Publicado por: AbBaDoN en Domingo 16 de Mayo de 2004, 19:13
Los bloques de assembler dentro de Turbo C van entre llaves con un identificador "asm". Pero la declaracion de variables va en sentencias de c. No hace falta asumir los segmentos ni la posicion. Por ejemplo

char c;
int i;

asm {
mov c, 48h
lea ax,i
mov ds:[ax], 0e56h
};

Es bastante transparente el uso de las variables. Su direccion las da el compilador, pero en assembler puede recorrerse como arreglos de bytes a partir de su direccion base.  :rolleyes: