Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: dac en 1 Julio 2012, 18:27 pm



Título: Assembly sin SO ¿?
Publicado por: dac en 1 Julio 2012, 18:27 pm
Hola a todos!

He estado estudiando el lenguaje assembly, pero la mayoría de los textos definen entre programación windows (DOS más especificamente) y Unix, Unix-like, pero lo que a mi me interesa realmente es aprender/entender el funcionamiento interno/básico de una computadora por lo cual me resulta insatisfactorio mostrar una cadena por pantalla haciendo uso de una interrupción o syscall al kerndel del SO local  :-\ ... me gustaría me recomendaran o me contaran algo al respecto de la programación sin depender del SO, como se maneja el "video" (aun no tengo remota idea de como funciona), teclado, etc,etc... uds me entienden.. quiero saber como funciona..  ;-)

PD: me refiero a algo como esto  http://mikeos.berlios.de/   (no sé lo suficiente como para intentar entender esto)  :-[

Saludos! y gracias!


Título: Re: Assembly sin SO ¿?
Publicado por: x64core en 2 Julio 2012, 12:20 pm
vos queres saber quiza architectura de la PC, aunque en los libros viejos me e fijado que habla bastante como fucionan el teclado
la pantalla, etc, por ejemplo la pantalla hay un cañon que corre infinita veces la pantalla llenandola de pixeles a una velocidad super
veloz y todo eso lo podes ver en un libro que se llama universo digital de IBM , PC o algo así en el primer enlace sale de google.
no le lei todo a aprendemele de memoria todo pero le di una buena leida.
tambien me e fijado que antes, en la programacion en DOS se trataba mucho esos temas, luego con windows ya casí no se trata
mucho, obviamente porque windows hace la tarea más facil


Título: Re: Assembly sin SO ¿?
Publicado por: _Enko en 2 Julio 2012, 15:44 pm
Aqui está la respuesta a todo y mas.

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html/

Tenes ahi un compilado de 3 volumenes o de 7. (es exactamente lo mismo, solo diferencia la cantidad de pdfs)


Título: Re: Assembly sin SO ¿?
Publicado por: dac en 2 Julio 2012, 17:28 pm
Por un lado conseguí un par de libros de la era "post DOS" y creo que voy ya teniendo donde sacar la info que quiero  ;-)
y también mire los pdf's de intel y me sirvió mucho la info un poco más profunda de los micros.

Muchas Gracias! :D


Título: Re: Assembly sin SO ¿?
Publicado por: _Enko en 2 Julio 2012, 22:19 pm
DOS es un sistema operativo... si  lo usas, no cumples la condicion de tu pregunta (assembly sin SO)

La única librería que podrias usar serían las interupciones de la BIOS y te mantendrias dentro de esa condicion. Pero  estarías atado a programar en 16bit.

Podrias programar bajo DOS pero sin usar las interrupciones de DOS, sino los de la BIOS unicamente... igual sería hacer trampa.


Título: Re: Assembly sin SO ¿?
Publicado por: Oblivi0n en 2 Julio 2012, 22:28 pm
Para usar ensamblador sin sistema operativo, tienes que conocer todos los detalles de los dispositivos que manejes, vease : bancos de registros, mapeos de memoria, tamaño de la memoria, numero de registros accesibles, etc etc. Si quieres, te puedo pasar un programar que usamos en la universidad en una asignatura que es un poco iniciacion a la arquitectura de programación. El programa simula un computador pero por software, tiene su propio ensamblador, que es relativamente parecido al ASM x86 de intel, y puedes ejecutar programas viendo todo lo que pasa ( incluso virtualizar pantalla y teclado ). Eso si, es una lata aprender a usarlo


Título: Re: Assembly sin SO ¿?
Publicado por: zu-zu en 2 Julio 2012, 22:42 pm
A pesar de que se diga lo contrario, no todo son interrupciones de la BIOS para modo real, ya que existe gran variedad de alternativas para programar aplicaciones sin necesidad de un OS, como por ejemplo los opcodes IN, OUT, LGDT, LIDT, etc.

Al no haber ningún OS instalado, la BIOS debe cargar nuestro bootloader -ubicado en el sector 0 de la unidad correspondiente- en la dirección de memoria de 16 bits 0x7C00 porque después de todo estamos en modo real, para luego cargar el núcleo del programa, pasar a modo protegido, etc.

La memoria de vídeo, al menos en modo texto, es mapeada en una dirección de memoria que ya no recuerdo, y escribiendo allí es posible imprimir caracteres en la pantalla.

La mejor alternativa para aprender a programar a tan bajo nivel sería leer la documentación oficial de Intel y tener conocimientos mínimos sobre hardware. Existe mucha documentación al respecto, sólo hay que saber buscar correctamente.

PD: En vista de que se ha hablado sobre simular un ordenador por software, te recomendaría probar BOCHS.


Título: Re: Assembly sin SO ¿?
Publicado por: Oblivi0n en 2 Julio 2012, 22:58 pm
Desconozco si en los ordenadores convencionales las direcciones de memoria se mapean en unos sitios "predeterminados", pero hasta donde alcanzan mis conocimientos, eso es una decisión del diseño del propio computador, y no tienen porque estar en esa dirección de memoria (corriganme si me que equivoco).


Título: Re: Assembly sin SO ¿?
Publicado por: zu-zu en 2 Julio 2012, 23:08 pm
Desconozco si en los ordenadores convencionales las direcciones de memoria se mapean en unos sitios "predeterminados", pero hasta donde alcanzan mis conocimientos, eso es una decisión del diseño del propio computador, y no tienen porque estar en esa dirección de memoria (corriganme si me que equivoco).

La memoria de vídeo en modo texto se mapea en 0xB8000, para modo gráfico se encuentra en 0xA0000. Ambas en ordenadores convencionales.


Título: Re: Assembly sin SO ¿?
Publicado por: dac en 3 Julio 2012, 04:02 am
_Enko:

Claro que si... pero precisamente por eso busque documentación post DOS , quiero decir antes del DOS

zu-zu:

Me has dado mucha luz en el asunto, lo tengo un poco más claro, donde puedo aprender a manejar la memoria de video? (en que libros) , probaré BOCHS , hace unos días encontré "MSX88" y aluciné; lo usé con DOSBOX sin embargo no me convenció y busque una alternativa que no encontré, gracias por recomendarlmelo

Oblivi0n:

Me podrías decir cual es dicho software? , y donde puedo encontrarlo?, me fascina lo que dices acerca de este


Gracias a todos!



Título: Re: Assembly sin SO ¿?
Publicado por: _Enko en 3 Julio 2012, 16:50 pm
Citar
Claro que si... pero precisamente por eso busque documentación post DOS , quiero decir antes del DOS
post viene de posterior...

antes del DOS?
No se que sistema operativo usaban en los 70'
DOS salio en el 1981
x86 salio en 1978

Tenes 3 años de margen ahí. Antes de eso, NADA de x86. Y despues de eso, DOS.


Estas confundiendo sistema operativo con arquiterctura de la pc.
Lo que buscas no es sobre un sistema operativo viejo, sino sobre la arquiterctura de pc (x86 en adelante)
Los manuales de Intel y AMD tiene esa informacion. Inclusive sobre la direccion de memoria en donde se guarda la matriz del texto de la pantalla estando en modo TEXTO.

EI: juntando mensajes.

Desconozco si en los ordenadores convencionales las direcciones de memoria se mapean en unos sitios "predeterminados", pero hasta donde alcanzan mis conocimientos, eso es una decisión del diseño del propio computador, y no tienen porque estar en esa dirección de memoria (corriganme si me que equivoco).
En x86, la matriz de la pantalla es mapeada en una direccion constante.
Segun el modo elegido. Usando el modo de 80x25 esta aqui:
Citar
$b800:$0000;
Es una matriz de WORD. LoByte es el caracter ASCII y el HighByte es el color.


Título: Re: Assembly sin SO ¿?
Publicado por: dac en 3 Julio 2012, 18:43 pm
Citar
post viene de posterior..

:O !! perdón, estoy algo estresado con esto de la graduación del cole y creo que estoy por volverme en loco!

quise decir Pre :P   

entiendo la diferencia entre la arquitectura y el sistema operativo, más bien quise decir que buscaba información sobre programación en ensamblador antes de el uso masivo del DOS (con lo cual los manuales son todos en base al DOS :( ) y quizás así encontrar lo que busco.

con lo que me han estado diciendo acerca de las matrices de vídeo y su posición constante en memoria, voy ya teniendo la idea, me gustaría saber donde puedo aprender a manejarla, y quizás profundizar un poco más (como se pasa dicha matriz al monitor  (donde entra en juego la placa o circuito encargado del video¿ o.O )) como dice el titulo [sin SO] manejando interrupciones de la BIOS y la memoria de video a pelo casi como si estuviésemos programando un sistema operativo; sé que no haré nada grandioso y como suelen decir a tan bajo nivel no podremos hacer muchas cosas realmente utiles, pero aprender el REAL funcionamiento es algo grandioso y que deseo mucho! :)

saludos


Título: Re: Assembly sin SO ¿?
Publicado por: Eternal Idol en 3 Julio 2012, 19:56 pm
Antes de MS-DOS: CP/M (http://en.wikipedia.org/wiki/CP/M).


Título: Re: Assembly sin SO ¿?
Publicado por: _Enko en 3 Julio 2012, 21:54 pm
Se agradece el enlace. Sabía que tenía que haber algo, pero no sabía que era.
No se si recuerdas la peli Silocon Valley (IBM tenía una pc descente, pero no tenían un buen sistema operativo... ese de seguro era el cp/m al que se referían)


alx741, si no estas dispuesto a leer los manueles de INTEL o AMD, deja el asunto, no vale la pena que pierdas tiempo porque parece  que buscas preguntas en vez de respuestas, lo estas enfocando mal.

Prueba con HTML5 y javascript, está super de moda y Metro de Windows 8 va usarlo.


Título: Re: Assembly sin SO ¿?
Publicado por: dac en 3 Julio 2012, 22:38 pm
voy "escarbando" más el asunto del bajo nivel , y cada vez parecen cosas que desconozco (y desearía saber) como funcionan, ahora entiendo (basicamente) las matrizes de video, en este mismo instante estoy echando mano de la documentación oficial de Intel como me recomendaste antes, y de un libro que enfoca la programación ensamblador sin asumir (en su mayor parte) que una función del DOS, de cualquier kernel UNIX o cualquier SO en general hará el trabajo sucio por nosotros sin que nos enteremos ( no creo en la magia XD ), así que creo encontré ya una guía para resolver mis dudas (complementaria a la documentación Intel).

* "Lenguaje ensamblador para computadoras basadas en Intel [quinta edición]" Kip R. Irvine
* Documentación oficial de intel

Gracias a todos por la ayuda, si luego de nutrirme de esa información que comento me quedo "insatisfecho" en algún punto en concreto estaré molestando de nuevo.  :silbar:


_Enko:

      PD: me manejo de forma aceptable en otros lenguajes incluido js/html , pero eso si... Dios me libre del windows y más aun del      8! XD jaja


Saludos y gracias nuevamente!


Título: Re: Assembly sin SO ¿?
Publicado por: _Enko en 3 Julio 2012, 23:04 pm
Despues de los manuales de INTEL el siguente paso es
http://wiki.osdev.org/Tutorials
http://wiki.osdev.org/Expanded_Main_Page

particularmente la parte de la memoria de video en modo texto
http://wiki.osdev.org/Babystep4

para probar las cosas, te recomiendo alguna maquina virtual wmware particularmente funciona bien.
Virtual PC de microsoft y de oracle se ponen molestos si pones como arranque una unidad de disquete que no tiene el tamaño exacto o sin algun formato, cosa que para empezar no se requiere.


Título: Re: Assembly sin SO ¿?
Publicado por: dac en 3 Julio 2012, 23:17 pm
Citar
Despues de los manuales de INTEL el siguente paso es
http://wiki.osdev.org/Tutorials
http://wiki.osdev.org/Expanded_Main_Page

vaya! creo que encontraré ahí todo lo que quiero/necesito para aprender/entender :D , Gracias!!! :D


Título: Re: Assembly sin SO ¿?
Publicado por: zu-zu en 3 Julio 2012, 23:54 pm
Aún así, sigue siendo recomendable el que tengas un buen manejo de ensamblador si lo que quieres es programar a tan bajo nivel, sino no llegaras muy lejos.

Para escribir en la pantalla en modo texto simplemente debes escribir los caracteres en la dirección de la memoria que comenté anteriormente. Un byte corresponde al color de texto y fondo, y el otro al carácter a imprimir. La posición del carácter depende de la posición de la memoria en la que haya sido escrito. Igualmente, la página OSDev tiene muchos ejemplos e información que te servirá de utilidad.

EDIT: En vista de que se ha hablado sobre floppy, actualmente los disquetes no son muy usados. Lo mejor sería usar una imágen ISO9660 con extensión Joliet y bootear desde allí.