• Viernes 8 de Noviembre de 2024, 21:45

Autor Tema:  Ensamblador + C  (Leído 3657 veces)

sneider

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Ensamblador + C
« en: Sábado 15 de Mayo de 2004, 11:38 »
0
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 ***

Ruben3d

  • Miembro HIPER activo
  • ****
  • Mensajes: 710
  • Nacionalidad: es
    • Ver Perfil
    • Web personal
Re: Ensamblador + C
« Respuesta #1 en: Sábado 15 de Mayo de 2004, 14:14 »
0
Hola.

En este post

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

Martin Candurra

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Ensamblador + C
« Respuesta #2 en: Domingo 16 de Mayo de 2004, 15:30 »
0
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

AbBaDoN

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Ensamblador + C
« Respuesta #3 en: Domingo 16 de Mayo de 2004, 19:13 »
0
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: