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:
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


Respuesta Responder a este mensaje
#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:
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


Respuesta Responder a este mensaje
#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%
Te mando un par de bat's (con el pr.bat, haces todo el proceso de
compìlacion y grabado en el boot sector de un disco en la FDD 3 1/2 A:), y
el codigo tanto del bootsec, como del bootcode. OjO te hara falta el tasm
y el tlink, yo uso el tasm 6.14 creo recordar.

"Fernando Marin" wrote in message
news:
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:
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











Respuesta Responder a este mensaje
#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:
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



Respuesta Responder a este mensaje
#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:
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:
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








Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida