Quiero intentar escribir un sistema operativo en el ensamblaje. POR FAVOR, no digas "Idiota, tienes que mejorar mucho en% s,% s,% s,% s, etc. para siquiera pensar en eso". Sé que normalmente no es algo que aprenda haciendo y que llevará meses de trabajo, pero quiero intentarlo y si no obtengo una respuesta aquí, solo preguntaré en otro lado. ¿Podría vincularme a un tutorial de inicio con nasm, o una forma de, en conjunto, escribir en la pantalla sin utilizar las funciones de C? Conozco casi todas las instrucciones de ensamblaje principales y he codificado durante mucho tiempo. Editar: Deseo usar nasm y win32Montaje puro: sin funciones C vinculadas
Respuesta
La única manera de hacerlo sin usar funciones C o llamadas al sistema es hacer que su código ensamblador se ejecute sin ningún otro sistema operativo o ejecutarse dentro de un emulador como Bochs o QEMU.
Here es un tutorial simple para nasm que escribe en la pantalla y no utiliza funciones C, y en ese nivel, no depende de Win32. Si desea escribir algo que haga tales cosas mientras se ejecuta en Windows, me temo que la función C es la única manera a menos que pueda aprender alguna interfaz de interrupción de software para hacerlo.
Como un aparte, osdev.org contiene muchos buenos artículos y tutoriales, incluidos muchos sobre cómo escribir código en ensamblado, para muchos aspectos diferentes del desarrollo del sistema operativo.
Además de las otras excelentes sugerencias anteriores, hay un Foro Nasm (y usted puede conseguir las versiones recientes de Nasm y el Manual friendly) en:
Puede parecer extraño que el ensamblador "Netwide" tiene un código de país en su página de inicio. No lo piense como "Estados Unidos", piense en él como "Me gusta, Nasm, amigo". :)
Como las interrupciones de BIOS no estarán disponibles una vez que cambie a modo, tiene sentido aprender cómo acceder al hardware directamente. Escribir en la pantalla es fácil para empezar. Necesita saber que "la pantalla" normalmente está en 0xB800000 (B800: 0000 en el segmento: forma de desplazamiento, que probablemente necesite). Tendrá que saber que el diseño es un byte (incluso numerado) para el personaje y un byte (número impar) para el "atributo" (color, principalmente). Aunque no está utilizando interrupciones, RBIL también incluye "ports.lst", que puede ser útil. ¡Y como se mencionó anteriormente, osdev.org es tu nuevo mejor amigo!
feliz Bootin',
Frank
Para citar Nick Morgan, con el que estoy de acuerdo:
Bueno, no creo que el aprendizaje es útil x86. No creo que alguna vez tenga que escribir lenguaje ensamblador en su trabajo cotidiano; este [ensamblador de aprendizaje] es puramente un ejercicio académico, algo para expandir su mente y su forma de pensar. 6502 [un lenguaje ensamblador] se escribió en una época diferente, una época en la que la mayoría de los desarrolladores escribían ensamblado directamente, en lugar de en estos nuevos lenguajes de programación de alto nivel. Entonces, fue diseñado para ser escrito por humanos. Los compiladores deben escribir lenguajes ensambladores más modernos, así que dejémoslo a ellos. Además, 6502 es divertido. Nadie nunca llamó a x86 divertido.
Actualmente estoy escribiendo también un "sistema operativo" por diversión, en el DCPU-16 assembly language (es posible que haya oído hablar de él). Es divertido porque puedo usar uno de los muchos "IDEs" en el navegador disponibles, como this one, y creo que se aplican los mismos principios que debe entender para el ensamblaje x86.
Pero x86 también se diseñó en el momento en que las personas escribían ensamblajes a mano, solo 3 años después del 6502. – harold
Sí, creo que lo que está tratando de decir es que, a lo largo de los años, evolucionó a algo que no debe escribirse a mano más :) – fresskoma
Bueno, ese es un punto más válido, diría que comencé con el PPro, pero IMO dejó de ser cierto cuando se introdujo SSE con el P3; después de más de una década, aún no he visto un compilador que haga un uso adecuado de él regularmente, en lugar de hacerlo de vez en cuando por accidente. . – harold
Si está tageting Win32, Win32 hay clásicos tutoriales de montaje por Iczelion: http://win32assembly.online.fr/tutorials.html
- 1. montaje sin -o loop
- 2. Acceso a funciones vinculadas a controladores de eventos con jQuery
- 3. C#: directorio de montaje personalizado
- 4. C funciones sin archivos de encabezado
- 5. manipulación en C puro Excepción
- 6. C++: operador de asignación virtual puro
- 7. Métodos estáticos sin estado vs. funciones C en Objective-C
- 8. funciones variadic (sin argumentos!)
- 9. archivo de C# ODP.NET carga o montaje
- 10. Bibliotecas predeterminadas vinculadas por gcc?
- 11. C# Comprehensiones de listas = ¿azúcar sintáctico puro?
- 12. Ventana Cocoa OpenGL en puro C?
- 13. C++ puro para Android y su rendimiento
- 14. montaje destacando
- 15. Printf sin salto de línea en el montaje
- 16. método virtual puro Llamado
- 17. ¿Puede haber funciones independientes en C# sin una clase?
- 18. Sobrecarga de la herencia de C++ sin funciones virtuales
- 19. C++: Funciones de cadena sin <cstring>
- 20. Haciendo una clase abstracta sin ningún método virtual puro
- 21. ¿Cómo usar el carpincho en Ruby puro (sin rieles)?
- 22. ¿Puede un bloque de montaje en línea (__asm) evitar la optimización de funciones?
- 23. Eliminar el prólogo de una función escrita en ensamblaje puro
- 24. funciones dentro de las funciones en C
- 25. C++: ocultar algunas funciones
- 26. Creando una GUI desde cero en C++ o montaje
- 27. Listas vinculadas recursivas en Java
- 28. Nodo principal en listas vinculadas
- 29. cómo implementar listas doblemente vinculadas
- 30. Dependencias del proyecto Qmake (bibliotecas vinculadas)
Prueba a buscar www.codeproject.com Recuerdo una vez que me he leído un buen artículo acerca de cómo escribir un gestor de arranque. – valdo
http://wiki.osdev.org/Printing_to_Screen – cnicutar
o usando el BIOS http://wiki.osdev.org/BIOS#BIOS_functions –