ASM y C

Iniciado por GeorgArming, 24 Noviembre 2011, 23:07 PM

0 Miembros y 1 Visitante están viendo este tema.

GeorgArming

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)?

GeorgArming

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.

d(-_-)b

Cita de: 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)?

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

Max 400; caracteres restantes: 366

GeorgArming

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.

Unbr0ken

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...
Cita de: SnowcrashDiscutir con desconocidos por internet es un ejercicio de imbéciles; todos acaban siendo quinceañeros arrogantes con cantidades infinitas de tiempo libre.

NO resuelvo dudas vía MP, para algo está el foro.

GeorgArming


GeorgArming

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.

pucheto

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.

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

GeorgArming

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?

pucheto

Cita de: 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?
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.