Autor
|
Tema: ASM y C (Leído 3,838 veces)
|
GeorgArming
Desconectado
Mensajes: 350
|
|
ASM y C
« 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)?
|
|
« Última modificación: 24 Noviembre 2011, 23:11 pm por GeorgArming »
|
En línea
|
|
|
|
GeorgArming
Desconectado
Mensajes: 350
|
|
Re: ASM y C
« Respuesta #1 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.
|
|
|
En línea
|
|
|
|
d(-_-)b
|
|
Re: ASM y C
« Respuesta #2 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...
|
|
|
En línea
|
Max 400; caracteres restantes: 366
|
|
|
GeorgArming
Desconectado
Mensajes: 350
|
|
Re: ASM y C
« Respuesta #3 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.
|
|
|
En línea
|
|
|
|
Unbr0ken
Desconectado
Mensajes: 248
|
|
Re: ASM y C
« Respuesta #4 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...
|
|
|
En línea
|
Discutir 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
Desconectado
Mensajes: 350
|
|
Re: ASM y C
« Respuesta #5 en: 25 Noviembre 2011, 23:07 pm » |
|
ok, gracias!
|
|
|
En línea
|
|
|
|
GeorgArming
Desconectado
Mensajes: 350
|
|
Re: ASM y C
« Respuesta #6 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.
|
|
|
En línea
|
|
|
|
|
GeorgArming
Desconectado
Mensajes: 350
|
|
Re: ASM y C
« Respuesta #8 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?
|
|
|
En línea
|
|
|
|
pucheto
Desconectado
Mensajes: 215
|
|
Re: ASM y C
« Respuesta #9 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.
|
|
|
En línea
|
|
|
|
|
|