enlazar VC++ con ASM ...

17/07/2005 - 11:49 por Jordi Maycas | Informe spam
Hola, os explico lo que estoy haciendo.

Con ayuda de algun codigo que he conseguido por internet, me estoy haciendo
en ensamblador un codigo para poder arrancar desde disco, y lo tengo todo ya
preparado. Ahora se me ha ocurrido, ya que tengo un problema con el
tratamiento de cadenas de caracteres que estoy intentanto solventar
directamente en asm, el hacer las funciones en C, mas bien ANSI C, es
decir trabajar directamente con punteros, y poco mas, nada de
interrupciones DOS.

¿Se podrian hacer las funciones (algo como montar una libreria string...),
generar los .obj y luego enlazarlo con mi codigo?

Aunque ahora que pienso, lo que hago es generarme un fichero bootcode.asm,
compilarlo (obj),y luego pasarlo a .com ... ¿Cual seria la manera de poder
incluir esas rutinas que he creado mas facilmente en C?

Gracias

Preguntas similare

Leer las respuestas

#1 Fernando Marin
23/07/2005 - 14:32 | Informe spam
Hola Jordi

¿Por qué no pones directamente el código ASM en
un programa escrito en C?

Algo así:

//Función que Suma dos Numeros
long Suma(long lA, long lB)
{
_asm {
MOV EAX, lA // eax = lA
MOV EBX, lB // ebx = lB
ADD EAX, EBX // eax = eax(lA) + ebx(lB);
MOV lA, EAX // lA = eax
}
return lA;
}

Fernando Marín
www.visual-c.net



"Jordi Maycas" escribió en el mensaje
news:
Mostrar la cita
#2 Fernando Marin
23/07/2005 - 14:45 | Informe spam
Otra opción es hacer tus funciones en C,
poner un punto de interrupción en la
parte que te interese y ver como esta
compilado.

Fernando Marín
www.visual-c.net

"Jordi Maycas" escribió en el mensaje
news:
Mostrar la cita
#3 Fernando Marin
24/07/2005 - 15:44 | Informe spam
Hola Jordi

El siguiente artículo de microsoft esplica como llamar funciones de c++
desde ensamblador
http://msdn.microsoft.com/library/d...sembly.asp

Eso si es para bloques _asm

En la documentación de microsoft tienes un ejemplo de como llamar a la
función c printf desde asm
http://msdn.microsoft.com/library/d...sembly.asp

// InlineAssembler_Calling_C_Functions_in_Inline_Assembly.cpp
#include <stdio.h>

char format[] = "%s %s";
char hello[] = "Hello";
char world[] = "world";
int main( void )
{
__asm
{
mov eax, offset world
push eax
mov eax, offset hello
push eax
mov eax, offset format
push eax
call printf
//clean up the stack so that main can exit cleanly
//use the unused register ebx to do the cleanup
pop ebx
pop ebx
pop ebx
}
}

Un saludo Jordi :)
Fernando Marín
http://www.visual-c.net/


P.D.
Estoy echando un vistazo a tu programa...


"Jordi Maycas" escribió en el mensaje
news:uN%
Mostrar la cita
#4 Isidro Muñoz
01/08/2005 - 20:49 | Informe spam
Hola Jordi,

Yo personalmente creo que no tendras ningun problema en enlazar un .obj asm
con un .obj en C, lo único que tendras que tener en cuenta será la llamada
de las funciones y la forma en que los parametros iran en la pila.

Lo único que tendras que controlar es el fichero .com generado al final (
que será el código de arranque del diskette o disco duro ) no sobrepase 512
bytes, que es tamaño del sector, en cuyo caso tendrías que hacer tu propio
loader al arrancar el diskette de tu programa.

Saludos
Isidro



"Jordi Maycas" escribió en el mensaje
news:
Mostrar la cita
haciendo
Mostrar la cita
ya
Mostrar la cita
#5 Jordi Maycas
02/08/2005 - 14:29 | Informe spam
en principio no hay problema. Si mira el fichero que envie hay dos codigos..
bootsect (512 bytes) y bootcode (sin problema por sobrepasarlos). En este
ultimo en donde yo voy añadiendo cosas y probando.

La cosa es que no se, tal vez seria mucho mas senzillo algo como el strcmp..
parecido a:

int strcmp_new(char *cad1,*cad2)
{
int contador;
*cad1=0;
while (*cad1==cad2)
*cad1++;

...
}

Eso compilarlo.. y desde el asm usarlo.

Quiero decir, es mucho mas senzillo hacer las tipicas funciones en ansi C,
que currarselo en asm.

"Isidro Muñoz" <imunoz@()daipro.net> escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida