Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: zonahurbana en 19 Abril 2014, 17:55



Título: Pregunta simple sobre registros
Publicado por: zonahurbana en 19 Abril 2014, 17:55
Acerca de los registros de 16 bits de "uso general": AX, BX, CX, DX
Y también los demás, como: CS, DS, SS, ES...

¿Existen en general y son usados por cada programa que se ejecuta? ¿O cada programa tiene una sección de memoria reservada sólo para sí mismo y se le asignan sus correspondientes registros?

Uso Windows 7 y usando DosBox puedo acceder a la aplicación debug.exe pero no entiendo qué es lo que sucede cuando modifico los valores de estos registros... quiere decir que si estoy usando un programa el programa modificará los valores de los punteros para ejecutar su código correspondiente? y por tanto habría error si ejecuto un programa y simultáneamente cambio los valores de los segmentos...

Y si cada programa tiene su respectiva segmentación, entonces qué es lo que modifico con el debug? los registros asignados para el programa "debug"?

La verdad me resulta muy confuso. Por favor espero que puedan ayudarme a entender mejor este tema.


Título: Re: Pregunta simple sobre registros
Publicado por: Eternal Idol en 19 Abril 2014, 20:10
Cada procesador fisicamente tiene unos registros y nada mas pero estos se pueden guardar en memoria y restaurar posteriorment, asi se logra multitasking (http://en.wikipedia.org/wiki/Multitasking) con un solo procesador por ejemplo.

Modificas los registros del programa que el depurador DEBUG este depurando (si ejecutas debug app125.exe seran los de app125.exe, en el caso de que no selecciones ningun programa en particular hay solo memoria sin inicializar para que vos pongas lo que quieras) y no al propio DEBUG. Y si, si en BX habia un puntero, lo modificas y el programa despues intenta acceder a una direccion invalida habra una excepcion no controlada ...


Título: Re: Pregunta simple sobre registros
Publicado por: zonahurbana en 20 Abril 2014, 02:09
Gracias por responder.
Ahora voy a escribir en modo afirmativo y usted me dice si entendí bien, por favor  :rolleyes:

Físicamente existen estos registros y son únicos:
- AX, BX, CX, DX
- CS, DS, ES, SS
- SI, DI

En la actualidad, dado que se ejecutan muchas tareas simultáneamente es necesario simular que existen estos registros para cada programa, pero realmente es memoria asignada.

Así cometa errores en mis prácticas básicas sobre los comandos U, R, D, E que escribo en el debug jamás se verán afectados los programas que tengo en ejecución ya que nunca especifico un programa al que aplicar el debug, simplemente uso esos valores. Por esa razón siempre aparecen inicializados con ceros cuando ejecuto el debug (la gran mayoría pero no todos).

MOV, INC son mnemotécnicos que pasan a ser lenguaje máquina a través del Assembler, pero el Assembler no es propiamente un lenguaje de programación.

¿U, R, D, E son instrucciones de procesador?


Título: Re: Pregunta simple sobre registros
Publicado por: Eternal Idol en 20 Abril 2014, 03:05
Si, los registros son unicos en cada procesador (aunque hay mas que esos que enumeraste).

Si, no podes interferir en otros procesos tan facilmente.

Assembly es un lenguaje de programacion de bajo nivel, assembler es el programa que ensambla el codigo de assembly y lo transforma en codigo maquina.

Esos son comandos del depurador DEBUG.


Título: Re: Pregunta simple sobre registros
Publicado por: zonahurbana en 21 Abril 2014, 01:59
En la actualidad, dado que se ejecutan muchas tareas simultáneamente es necesario simular que existen estos registros para cada programa, pero realmente es memoria asignada.

Los registros son memorias de poca capacidad a los que se puede acceder mucho más rápido que a la memoria misma, ¿verdad?
¿Si es cierto que son simulados por memoria quiere decir que hay una zona "especial" de la memoria a la que se puede acceder más rápido? ¿Y los registros únicos (no simulados) para qué sería usado entonces, para el SO?

Gracias por responder nuevamente.


Título: Re: Pregunta simple sobre registros
Publicado por: Eternal Idol en 21 Abril 2014, 03:04
http://en.wikipedia.org/wiki/Processor_register

Si.

No, se trabaja siempre con los registros, solo que para poder ir cambiando de tarea se guarda en memoria y despues se restaura el estado de los mismo (los valores que contenian antes de cambiar de tarea).


Título: Re: Pregunta simple sobre registros
Publicado por: Vaagish en 24 Abril 2014, 05:22
Citar
¿Y los registros únicos (no simulados) para qué sería usado entonces, para el SO?

En realidad, no hay "no simulados", se guarda el estado de los registros, se cargan los registros de otra tarea, el procesador hace la tarea por el tiempo que el SO considere necesario, se guardan los registros y se cambia de tarea.. lo demas es repetir el proceso hasta apagar la computadora...  ;D

Saludos!

PD: Espero no estar equivocado..


Título: Re: Pregunta simple sobre registros
Publicado por: Eternal Idol en 24 Abril 2014, 05:52
Si, fue lo que intente decir, tal vez sin exito  ;D


Título: Re: Pregunta simple sobre registros
Publicado por: zonahurbana en 25 Abril 2014, 05:35
En cuanto a conocimiento de hardware estoy bastante mal... estuve leyendo acerca de esto, y con lo que comentan, a ver si entendí:

A los registro se accede más rápidamente ya que no es necesario hacer uso del bus de datos para acceder a la memoria, sino que se accede a ellos directamente (no estoy muy seguro cómo exactamente, además en otra parte del texto decía que es una zona especial de memoria, con lo que parece contradecirse).

Los registros de segmentos permiten seleccionar un segmento en particular (como el de datos, el de código, etc). No es que esos registros guarden información, sólo guardan la dirección de la base del segmento. Luego a estos valores se les multiplicará por 10h y sumará un desplazamiento.

Los procesadores no se centran en un único proceso, sino que posponen las instrucciones momentáneamente para ir por otros, en eso deben guardan los valores actuales de los registros en pila para usar los nuevos valores del nuevo programa que se ejecuta. Cuando se deba volver al que se estaba antes se carga de la pila y se avanzan algunas instrucciones más. Aparentemente se ejecutan varios procesos simultáneamente, pero lo que ocurre es que se dan pasadas de a pocos en cada uno de ellos. De no ser así, el ordenador estaría pendiente de recibir lo que actualmente estoy escribiendo y no podría continuar ejecutando dota2 y otras aplicaciones que tengo abiertas.


Título: Re: Pregunta simple sobre registros
Publicado por: Vaagish en 25 Abril 2014, 19:51
Citar
A los registro se accede más rápidamente ya que no es necesario hacer uso del bus de datos para acceder a la memoria, sino que se accede a ellos directamente (no estoy muy seguro cómo exactamente, además en otra parte del texto decía que es una zona especial de memoria, con lo que parece contradecirse).

No entiendo bien a que hará referencia que es una "zona especial de memoria", sera porque son como pequeñas memorias  :huh:
Lo demás esta todo correcto, aunque aclaro que el procesador tiene unos buses dentro, bus de datos y bus de control (quizás algún otro que no recuerdo), busca alguna imagen en google de como esta diseñado un procesador..

Citar
Los registros de segmentos permiten seleccionar un segmento en particular (como el de datos, el de código, etc). No es que esos registros guarden información, sólo guardan la dirección de la base del segmento. Luego a estos valores se les multiplicará por 10h y sumará un desplazamiento.
Los procesadores no se centran en un único proceso, sino que posponen las instrucciones momentáneamente para ir por otros, en eso deben guardan los valores actuales de los registros en pila para usar los nuevos valores del nuevo programa que se ejecuta. Cuando se deba volver al que se estaba antes se carga de la pila y se avanzan algunas instrucciones más. Aparentemente se ejecutan varios procesos simultáneamente, pero lo que ocurre es que se dan pasadas de a pocos en cada uno de ellos. De no ser así, el ordenador estaría pendiente de recibir lo que actualmente estoy escribiendo y no podría continuar ejecutando dota2 y otras aplicaciones que tengo abiertas.

Creo que si, todo así.

PD: Yo tampoco la tengo re clara, puede que pifee

Saludos!!


Título: Re: Pregunta simple sobre registros
Publicado por: zonahurbana en 25 Abril 2014, 21:43
No entiendo bien a que hará referencia que es una "zona especial de memoria", sera porque son como pequeñas memorias  :huh:
Bueno, imagino que físicamente los registros son chips pequeños aislados de la memoria principal. Como memoria imagino un chip más grande, y si los registros son una parte especial de la memoria querría decir que forman parte de ese chip grande y que no están aislados. En el texto que leí decía eso, que eran una zona especial de memoria y entonces me pareció extraño porque supuestamente están separados.

¿Además cuando se habla de memoria se refiere a la RAM o a la ROM? Estuve leyendo por internet y según ello no podemos basarnos en el significado de las siglas de ambos tipos de memoria para diferenciarlos correctamente. Lo que entendí principalmente fue:
- La memoria RAM es volátil ya que pierde sus datos al perder su fuente de alimentación. Permite leer y escribir en cualquier dirección, sin tener que recorrer desde el inicio hasta llegar a la dirección en cuestión. Aquí se guardan las instrucciones de las aplicaciones.
- La memoria ROM es no volátil ya que mantiene sus datos de manera indefinida, pero a cambio es 1 memoria de solo lectura. Aquí se almacena la BIOS del sistema que es información básica sobre cómo debe comunicarse con ciertos periféricos, como mouse, teclado.
Pero mis dudas serían:
- ¿Entonces la memoria ROM tiene mucha menos capacidad que la memoria RAM ya que solo trae ciertos programas grabados que son solo de lectura?
- No tiene mucho sentido decir que es solo de lectura, ¿porque entonces nuestros archivos dónde se guardan? Si fuese en la RAM se perderían, y supuestamente en la ROM no se puede escribir.
- La memoria RAM es la que trabaja con el procesador para transferir datos y ejecutar instrucciones, ¿verdad?
- Es como si todo se guardase en la memoria ROM pero siempre se cargase su contenido a la memoria RAM al prender el ordenador, para un uso más facilitado, aunque esto se contradice con lo que mencionan las páginas.

Gracias por responder. Creo que es difícil entender el funcionamiento al 100%, al menos mientras no conozca la representación física exacta de todo. De momento creo que está bien esta comprensión "teórica". Y espero que puedan continuar ayudándome a despejar dudas  ;-)


Título: Re: Pregunta simple sobre registros
Publicado por: Vaagish en 25 Abril 2014, 23:00
Citar
Bueno, imagino que físicamente los registros son chips pequeños aislados de la memoria principal. Como memoria imagino un chip más grande, y si los registros son una parte especial de la memoria querría decir que forman parte de ese chip grande y que no están aislados. En el texto que leí decía eso, que eran una zona especial de memoria y entonces me pareció extraño porque supuestamente están separados.

Las instrucciones de los programas (cuando se cambia la tarea) se guardan en una estructura en la RAM, los registros están dentro del procesador,, están aislados de la RAM si.

Citar
¿Además cuando se habla de memoria se refiere a la RAM o a la ROM?
Se refiere a la RAM, ahi es donde se cargan los programas y donde se guardan las instrucciones, pero los programas estan guardados en el disco duro, por eso no se pierden los datos cuando se apaga la computadora.. La ROM se utiliza para el inicio de la PC, porque cuando uno enciende el equipo, es muy pronto para leer del disco duro, y en la RAM no hay nada..

Citar
- La memoria ROM es no volátil ya que mantiene sus datos de manera indefinida, pero a cambio es 1 memoria de solo lectura. Aquí se almacena la BIOS del sistema que es información básica sobre cómo debe comunicarse con ciertos periféricos, como mouse, teclado.
Primero se carga de la BIOS, luego se lee del disco duro, y se van cargando los programas en la RAM, luego el Procesador va ejecutando las instrucciones de cada programa, uno a la vez y cambiando, el SO es quien determina por cuanto tiempo se ejecuta cada tarea..

Citar
La memoria RAM es la que trabaja con el procesador para transferir datos y ejecutar instrucciones, ¿verdad?
Exacto, de esa manera es como funciona lo que te comentaba anteriormente..

De nada! A mi me sirve, porque si me equivoco ya nos corregirán jeje

Saludos!!