ASM, arquitecturas y procesadores compatibles

Iniciado por GeorgArming, 29 Noviembre 2011, 19:54 PM

0 Miembros y 2 Visitantes están viendo este tema.

.:UND3R:.

Podríamos decir que tenemos los siguientes niveles de programación:

Lenguaje Alto nivel                                   <-Nivel 5
Lenguaje ensamblador                             <-Nivel 4
Sistema operativo                                   <-Nivel 3
Arquitectura del conjunto de instrucciones <-Nivel 2
Microarquitectura                                    <-Nivel 1
Lógica digital                                          <-Nivel 0

Desde el nivel 2 es en donde el usuario puede comenzar a programar, este nivel es en donde se trabaja bajo instrucciones binarias

La única posibilidad a mi parecer sería crear una Máquina virtual (todos sabemos que las máquinas virtuales son creadas para facilitar al programador con instrucciones mucho más cómodas), un ejemplo claro de ella es cualquier computador que tenga instalado VJM (Virtual java machine) podrá ejecutar aplicaciones java sin importar la Arquitectura del procesador, esto debido a que el código va descendiendo hasta llegar a la lógica digital en donde se interpretará las instrucciones.

El paso de un nivel a otro se puede realizar a través de dos métodos:

1-Traducción: la traducción consiste en que un programa traduzca un lenguaje a un nivel inferior, este programa debe estar hecho con el lenguaje del nivel anterior para que puede ser interpretado.

2-Interpretación: consiste en que mientras el programa está siendo ejecutado las instrucciones son interpretadas en los otros lenguaje

en ambos métodos los lenguajes deben ser progresivos ya que el tiempo de Interpretación o Traducción podría relentizar el proceso de ejecución de este debido a la pérdida de tiempo que se demorará en pasar de un lenguaje a otro

El gran problema es que con anterioridad se debe tener instalada la máquina virtual y para lograr eso la única forma de poder instarla es que este sea instalado con un lenguaje inferior. Esto puede ser problema si queremos diseñar un virus multiplataforma o programas de ese estilo, pero si nos enfocamos en la programación comercial la creación de una máquina virtual solucionaría el problema, pero insisto que la máquina virtual debería ser programada para cada arquitectura por lo que se convertiría en lo mismo

Saludos

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

GeorgArming

#11
vale, comprendo. última pregunta (de momento XD): ¿el lenguaje C es portable? es decir, un programa en C que no tenga ninguna instrucción en ASM, es portable, no?

EDITO: otra pregunta (y no digo que es la última porque a saber XD): si cada arquitectura requiere un ASM diferente, cómo es que cuando vas a descargarte ubuntu sólo te dan 2 opciones (32 bits y 64 bits)? ¿eso significa que da igual que sea x86 o otra arquitectura y, por tanto, este ubuntu que te descargas es portable? ¿cómo es posible que cuando vayas a descargarte el kernel linux sólo haya un tipo de kernel (no hay kernel versión 2.5 de x86, ARM,... sólo hay kernel 2.5)?

GeorgArming

más concretamente:

"La Portabilidad del núcleo Linux y arquitecturas soportadas, se refiere a que originalmente escrito para procesadores Intel i386, el núcleo Linux fue recodificado para facilitar la portabilidad de éste.
Habiendo sido reescrito una vez para la arquitectura Motorola 68K, la perspectiva de las tediosas reescrituras para cada arquitectura posible, incitada por Linus Torvalds, se enfocaba en poseer una base de código modular que pudiese ser portada hacia diferentes arquitecturas con un mínimo de esfuerzo.
Carpetas específicas de arquitectura en las fuentes del núcleo, se dirigen a detalles particulares de cada procesador soportado, mientras todas las ventajas radican el en hecho de compartir un idéntico código de núcleo."

skapunky

Cita de: GeorgArming en  1 Diciembre 2011, 19:24 PM
vale, comprendo. última pregunta (de momento XD): ¿el lenguaje C es portable? es decir, un programa en C que no tenga ninguna instrucción en ASM, es portable, no?

El lenguaje C es universal pero no portable, a ver si me explico: Si tu programas directamente en la ROM del procesador en C éste programa debe tener enlazada una libreria del procesador que uses, no es lo mismo un intel, que un AMD un Zilog Z80... Este "include" simplemente defines cada parámetro del C a una dirección de memória donde evidentemente depende el procesador esta cambia.

El asm independiemente que cambie según la arquitectura, se le defínen igualmente posiciónes de memória. Por ejemplo las llamadas IRQ's que procesan en general los perfiféricos cada una tiene una dirección de memória (te lo digo como ejemplo).
Killtrojan Syslog v1.44: ENTRAR

GeorgArming

Cita de: skapunky en  1 Diciembre 2011, 21:08 PM
El lenguaje C es universal pero no portable, a ver si me explico: Si tu programas directamente en la ROM del procesador en C éste programa debe tener enlazada una libreria del procesador que uses, no es lo mismo un intel, que un AMD un Zilog Z80... Este "include" simplemente defines cada parámetro del C a una dirección de memória donde evidentemente depende el procesador esta cambia.

El asm independiemente que cambie según la arquitectura, se le defínen igualmente posiciónes de memória. Por ejemplo las llamadas IRQ's que procesan en general los perfiféricos cada una tiene una dirección de memória (te lo digo como ejemplo).

vale, te entiendo. ¿pero entonces cómo es que sólo hay una versión del kernel linux?

skapunky

El kernel de linux está optimizado para trabajar en mas de 1 tipo de procesador, pero eso no quita que cada empresa (intel,amd...)tenga que aportar codigo para que el kernel de linux sea compatible en su procesador.

Cada empresa ya se a encargado de dar su granito de arena para hacer compatible el kernel de linux y seguirán optimizando el codigo para corregir o mejorar su rendimiento.

El kernel de linux es algo complego, no es un solo archivo de codigo fuente. 
Killtrojan Syslog v1.44: ENTRAR

GeorgArming

muchísimas gracias a todos, mi duda ha quedado resuelta (aunque he descubierto que lo que quería no existe  :-\).

disculpad que vaya haciendo una pregunta tras otra  :D, pero ya que estamos, para no abrir un tema nuevo, y con relación con los OS: ¿por qué los sistemas operativos no tienen función main? hasta donde yo sé, cuando se ejecuta un programa, se va siguiendo la función main y se van haciendo las diferentes funciones. pero si un OS no tiene main, cuando se inicia el sistema operativo, ¿qué parte del código indica que tiene que comenzar por el bootloader, y no por otra parte del código?

skapunky

Piensa que si un SO tuviera un MAIN como lo conocemos en programación, solo se ejecutaria una instrucción en cada momento y la utilidad del pc seria nula, es decir, no funcionaria.

Un SO es mas complejo que un programa hecho por ejemplo en C, incluso mas complejo que un programa hecho en un microcontrolador. Yo te pondré el caso de un microcontrolador.

Un microcontrolador tiene una parte de programa principal (main) y aparte de forma paralela puede utilizar dos tipos de interrupciónes, las externas e internas. Es decir cuando se activan ejecutan el codigo que se les asigna. La función de estas es ejecutar un codigo paralelo al codigo del programa.

Un procesador de ordenador, para que me entiendas tendría una gran cantidad de "interrupciones" piensa que mientras se le el puerto del USB, se debe leer el teclado, o enviar una señal a la tarjeta grafica, o procesar el borrado de un archivo..como veras la lista es muy grande. Si el SO se ejecutase en una secuencia lineal en un MAIN todo eso no podría ser posible.

El tema del bootloader es otra cuestión, el bootloader se ejecuta directamente en el procesador a 16 bits en ensamblador, éste puede tener diferentes funciónes entre otras cargar archivos del SO para que se inície y estos ya pueden estar escritos en ensamblador o C.
Killtrojan Syslog v1.44: ENTRAR

GeorgArming

muchas gracias. veo que aquí hay auténticos cracks  :D.

pucheto

Fijate de conseguir http://www.amazon.com/Essentials-Computer-Organization-Architecture/dp/0763737690

Si queres saber mas sobre arquitecturas de computadoras ( Es introductorio, pero vale la pena leerlo ).