Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: GeorgArming en 24 Noviembre 2011, 23:07 pm



Título: ASM y C
Publicado por: GeorgArming en 24 Noviembre 2011, 23:07 pm
Hace poco os pregunté sobre cómo hacer un OS y me redirigísteis hacia otros posts e informaciones. Tengo una duda y, por favor, alguien me la podría resolver? He buscado información pero no he encontrado exactamente lo que busco, y por esto os pregunto a vosotros.

Tomando un tutorial y un ejemplo con ASM, conseguí arrancar en virtualbox un bootloader que imprimiera en pantalla el mensaje X. Haciendo lo mismo pero en C con otros tutorailes, no lo conseguí.

Pero vayamos a lo importante. Si quiero programar un OS, els mejor que escriba el código fuente en ASM pero incluyendo funciones en C o hacerlo al revés (es decir, haciendo el códgo fuente en C incluyendo ASM)?


Título: Re: ASM y C
Publicado por: GeorgArming en 24 Noviembre 2011, 23:13 pm
OJO, la pregunta seguramente es muy estúpida pero, por favor, os pido que me contestéis directamente. Ya he leído mucha documentación  pero no entiendo esa parte.


Título: Re: ASM y C
Publicado por: d(-_-)b en 25 Noviembre 2011, 16:05 pm
Hace poco os pregunté sobre cómo hacer un OS y me redirigísteis hacia otros posts e informaciones. Tengo una duda y, por favor, alguien me la podría resolver? He buscado información pero no he encontrado exactamente lo que busco, y por esto os pregunto a vosotros.

Tomando un tutorial y un ejemplo con ASM, conseguí arrancar en virtualbox un bootloader que imprimiera en pantalla el mensaje X. Haciendo lo mismo pero en C con otros tutorailes, no lo conseguí.

Pero vayamos a lo importante. Si quiero programar un OS, els mejor que escriba el código fuente en ASM pero incluyendo funciones en C o hacerlo al revés (es decir, haciendo el códgo fuente en C incluyendo ASM)?

Pues como quieras, puedes programas en C asm inline.

Solo espero que no estes intentando hacer un sistema operativo leyendo tutoriales, pues porque creo que no lo hay, y es mas, necesitara conocimientos avanzados en programacion.

suerte.

saludos...



Título: Re: ASM y C
Publicado por: GeorgArming en 25 Noviembre 2011, 16:59 pm
como quiera, pero cuál es la mejor opción? en el caso de linux, está en C y incluyendo ASM o al revés?

y no, no estoy aprendiendo con tutoriales, estoy aprendiendo, básicamente, con libros, como Sistemas Operativos de Tanenbaum, pero al principio, para crear el bootloader, sí miré algún tutorial.


Título: Re: ASM y C
Publicado por: Unbr0ken en 25 Noviembre 2011, 17:43 pm
No he revisado a fondo el código fuente de ningún OS que sea SL, ni mucho menos privativos, pero... he de suponer que te ahorras muchísimas líneas de código usando asm dentro de C...


Título: Re: ASM y C
Publicado por: GeorgArming en 25 Noviembre 2011, 23:07 pm
ok, gracias!


Título: Re: ASM y C
Publicado por: GeorgArming en 26 Noviembre 2011, 00:10 am
Disculpad mi ignorancia, pero tengo otra duda. He estado investigando sobre cómo incluir ASM in line en C, con gcc. Tengo el código en ASM siguiente (y me funciona):

[BITS 16]
ORG 0

main:
cli
mov     ax, 0x07C0
mov     ds, ax
mov     es, ax
mov     fs, ax
mov     gs, ax
mov     ax, 0×0000
mov     ss, ax
mov     sp, 0xFFFF
sti
mov si, msgTexto
call DisplayMessage

DisplayMessage:
lodsb
or      al, al
jz      .DONE
mov     ah, 0x0E
mov     bh, 0×00
mov     bl, 0×07
int     0×10
jmp     DisplayMessage
.DONE:
jmp Loop
Loop:
jmp Loop
msgTexto db 0x0D, 0x0A, “Hola mundo!!”, 0×00
times 510-($-$$) db 0
dw 0xAA55

Vale, pues he visto diferentes maneras de incluir eso en C. Y ninguna me ha funcionado. Alguien sabría cómo hacerlo en este caso concreto?

Por ejemplo, he probado:

int main()
{
asm(
código asm
);
__asm__(...

y otros pero no me funciona. Seguro que por aquí hay alguna mente brillante capaz de solucionarlo.


Título: Re: ASM y C
Publicado por: pucheto en 26 Noviembre 2011, 03:55 am
Estas usando la sintaxis de intel, y gcc usa la sintaxis de at&t.

Toda la informacion que necesitas esta en http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html (http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html).

Por casualidad conoces la 'convencion C' para llamar a funciones ?


Título: Re: ASM y C
Publicado por: GeorgArming en 26 Noviembre 2011, 12:12 pm
entonces tengo que rescribir el código en at&t y escribirlo entre asm(...);?

más o menos conozco la convención C para llamar funciones. entonces sugieres que escriba el código en c que llame a una función en ASM?


Título: Re: ASM y C
Publicado por: pucheto en 27 Noviembre 2011, 04:08 am
entonces tengo que rescribir el código en at&t y escribirlo entre asm(...);?

más o menos conozco la convención C para llamar funciones. entonces sugieres que escriba el código en c que llame a una función en ASM?
Lo mas comun es tener codigo de C q llama a funciones en ASM, pero no pienses en el SO como un programa comun, con un main y demas. Los SO no suelen tener main.
Y suele haber mezclas de codigo en ASM q llama a C y ese codigo en C llama a codigo en ASM y asi.

Te recomiendo agarrar algun libro de SO y los manuales de intel. E ir leyendo de los 2 al mismo tiempo. ( cuando lees la explicacion de paginacion en el libro de SO, lees como labura en los manuales de intel  y asi ).

De todas formas lo mas facil suele ser agarrar el codigo de algun otro SO e ir leyendolo y modificandolo.


Título: Re: ASM y C
Publicado por: GeorgArming en 27 Noviembre 2011, 11:59 am
muchas gracias, pucheto. en cuanto a libros, estoy leyendo Sistemas Operativos de Tanenbaum (me resulta difícil pero más o menos voy entendiendo), ya pillaré alguno de intel.

como dices, me voy a bajar algún código fuente, seguramente el de minix o linux.


Título: Re: ASM y C
Publicado por: pucheto en 28 Noviembre 2011, 00:23 am
muchas gracias, pucheto. en cuanto a libros, estoy leyendo Sistemas Operativos de Tanenbaum (me resulta difícil pero más o menos voy entendiendo), ya pillaré alguno de intel.

como dices, me voy a bajar algún código fuente, seguramente el de minix o linux.
Los manuales de intel estan en internet, no te los tenes q leer todos, no tiene sentido. Tambien son muy tecnicos y en ingles. Pero te dan la clave para entender q estas haciendo y como armar las distintas estructuras del kernel.