¿Cuál es la diferencia entre código objeto, código máquina y código binario?

Iniciado por Aikanáro Anário, 18 Diciembre 2010, 19:53 PM

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

Aikanáro Anário

Wikipedia dice sobre el código objeto:
CitarEn programación, se llama código objeto al código que resulta de la compilación del código fuente. Consiste en lenguaje máquina o bytecode y se distribuye en varios archivos que corresponden a cada código fuente compilado

¿O sea que el código objeto está escrito (o mas bien se traduce) a código máquina?
¿Cómo que se distribuyen a varios archivos si el código fuente es solo uno? ¿O se está refiriendo a la programación donde el programa se codifica en varios códigos fuentes (no se si se llama modular o estructural)?




El código máquina es el código creado con un lenguaje de máquina. ¿Este código [máquina] está compuesto por 0s y 1s, como el binario, o por el caracteres del sistema hexadecimal? ¿O es que lenguaje máquina se refiere a cualquier lenguaje de bajo nivel (lenguaje máquina = lenguaje de bajo nivel)?
Lo que faltaba en internet: http://binar10s.blogspot.com/

Gabriela


Al leerte me trasmitiste tus dudas y tiré un poco de Google. De momento estoy nada más que con Pynthon (con todas las peculiaridades de su Intérprete) y la idea que tenía (que puede estar mal, y corregídme, plis ), dicho en una forma no técnica es la siguiente:

Código fuente = código que yo escribo en la hoja en blanco. Son todas las intrucciones que digamos "programo", utilizando el lenguaje de PYN.

Código Objeto = Código de máquina  = el resultado que me aparece en el Intérprete de Pyn, cuando corro el programa pulsando F 5, previo haber guardado la hoja en blanco en un archivo.py

--------------------------

Eso es la idea que yo tengo, ahora, y sin perjuicio lo que encontré, de acuerdo a las fuentes que dejo:



Intérpretes y compiladores

La traducción de una serie de instrucciones en lenguaje ensamblador (el código fuente) a un código máquina (o código objeto) no es un proceso muy complicado y se realiza normalmente por un programa especial llamado compilador.

La traducción de un código fuente de alto nivel a un código máquina también se realiza con un compilador, en este caso más complejo, o mediante un intérprete.

Un compilador crea una lista de instrucciones de código máquina, el código objeto, basándose en un código fuente. El código objeto resultante es un programa rápido y listo para funcionar, pero que puede hacer que falle el ordenador si no está bien diseñado.

Los intérpretes, por otro lado, son más lentos que los compiladores ya que no producen un código objeto, sino que recorren el código fuente una línea cada vez.

Cada línea se traduce a código máquina y se ejecuta. Cuando la línea se lee por segunda vez, como en el caso de los programas en que se reutilizan partes del código, debe compilarse de nuevo. Aunque este proceso es más lento, es menos susceptible de provocar fallos en la computadora.




Código fuente, en informática, las instrucciones de programa legibles por el programador y escritas en un lenguaje ensamblador o de más alto nivel.

El concepto contrario es el código objeto, que se deriva del código fuente y está diseñado para ser legible sólo por la máquina. Véase también Lenguaje de programación.




Código objeto, en informática, código generado por un compilador o un ensamblador, traducido a partir del código fuente de un programa. Casi siempre este término se refiere al código máquina que puede ejecutarse directamente en la unidad central de proceso (CPU) del sistema, pero también puede ser código fuente de lenguaje ensamblador o una variante de código máquina.





Lenguaje máquina

El lenguaje propio del ordenador, basado en el sistema binario, o código máquina, resulta difícil de utilizar para las personas. El programador debe introducir todos y cada uno de los comandos y datos en forma binaria, y una operación sencilla como comparar el contenido de un registro con los datos situados en una ubicación del chip de memoria puede tener el siguiente formato: 11001010 00010111 11110101 00101011...


 
http://orbita.starmedia.com/~prog201eq20003/tipos%20de%20memoria%204.htm


-------------------------


Código (informática) Término genérico para nombrar las instrucciones del programa, utilizadas en dos sentidos generales :

El primero se refiere al código fuente, legible a simple vista, que son las instrucciones escritas por el programador en un lenguaje de programación.

El segundo se refiere al código máquina ejecutable, que son las instrucciones convertidas de código fuente a instrucciones que el ordenador o computadora puede comprender.



Código fuente: En informática, las instrucciones de programa legibles por el programador y escritas en un lenguaje ensamblador o de más alto nivel. El concepto contrario es el código objeto, que se deriva del código fuente y está diseñado para ser legible sólo por la máquina.


Código objeto: En informática, código generado por un compilador o un ensamblador, traducido a partir del código fuente de un programa. Casi siempre este término se refiere al código máquina que puede ejecutarse directamente en la unidad central de proceso (CPU) del sistema, pero también puede ser código fuente de lenguaje ensamblador o una variante de código máquina.


http://usuarios.multimania.es/tutoinformatica/codigo.html


En este enlace también ejemplos.


http://iie.fing.edu.uy/~vagonbar/gcc-make/gcc.htm


La repetición de conceptos con más o menos palabras similares es porque por disciplina de estudio, buscaré al menos dos fuentes para cotejar...


Gabriela

Tú te enamoraste de mi valentía, yo me enamoré de tu oscuridad; tú aprendiste a vencer tus miedos, yo aprendí a no perderme en tu abismo.

Aikanáro Anário

#2
Entonces resumiendo:

Codigo objeto es el programa ya compilado, que puede estar en un archivo "xxx.extension_del_lenguaje" el cual es interpretado por un interprete (valga la redundancia  :P) o que puede ser directamente un ejecutable. Está escrito (o traducido) a lenguaje máquina

Y el lenguaje ensamblador es un lenguaje de bajo nivel que sí usa el sistema hexadecimal además de algunas palabras abreviadas del inglés.

Pero todavía estoy líado porque no me aclaro cómo está expresado o escrito el lenguaje máquina, si es con el sistema binario, el hexadecimal, o en lenguaje ensamblador?


:huh:
Lo que faltaba en internet: http://binar10s.blogspot.com/

Gabriela


Una cosa antes que nada, yo te explico con mis palabras ( o te dejo la fuente si no es así) lo que puede no ser de todo acertado, tenlo en cuenta. Es más te diría que si profundizas el tema, es todo un poco  más complejo y los conceptos se van puliendo y afinando. 

Por otro lado, el lenguaje natural (es decir, el idioma en que hablamos) permite ciertas licencias de las cuales  el lenguaje técnico se aprovecha.

Algo así como que en el lenguaje de a pie, a una misma palabra le otorgamos diferentes acepciones, eso sucede, a veces, también con el lenguaje técnico.

Por eso lo bueno de leer varias fuentes, porque no siempre  usamos los términos del lenguaje técnico, con estricto rigor científico u otorgándoles el mismo significado y de ahí las confusiones para los que comenzamos en esto.

Todo este rollo de acepciones y significados diferentes lo estudia la Lingüística.  :xD



Al ajo:

El lenguaje binario es el lenguaje de ceros y unos.


De la Wiki:

CitarEl sistema binario, en matemáticas e informática, es un sistema de numeración en el que los números se representan utilizando solamente las cifras cero y uno (0 y 1). Es el que se utiliza en las computadoras, pues trabajan internamente con dos niveles de voltaje, por lo que su sistema de numeración natural es el sistema binario (encendido 1, apagado 0).

http://es.wikipedia.org/wiki/Sistema_binario#Conversi.C3.B3n_entre_binario_y_hexadecimal


------------------------------

El código de máquina (u objeto, para simplificar a la luz del post) agrupa las secuencias de instrucciones como sucesiones de unos y ceros ( binarios) que siguen ciertas pautas o reglas.



En lenguaje ensamblador, son una serie de notaciones que representan simbólicamente códigos binarios:  por ejemplo: SUM (sumar), DIV (dividir) funcionando como instrucciones de código de máquina a través de "códigos" mnemotécnicos (= una notación fácil de memorizar). Los antecedentes históricos te ayudarán a comprender esto.


-------------------------------

De la Wiki:

CitarEl sistema Hexadecimal (no confundir con sistema sexagesimal), a veces abreviado como Hex, es el sistema de numeración de base 16 —empleando por tanto 16 símbolos—. Su uso actual está muy vinculado a la informática y ciencias de la computación, pues los computadores suelen utilizar el byte u octeto como unidad básica de memoria...


http://es.wikipedia.org/wiki/Sistema_hexadecimal

--------------------------

Siendo posible convertir de binario a Hexadecimal y viceversa

Por cierto, compilar e interpretar no son sinónimos estrictamente hablando, :xD cuyos matices derivan, entre otras cosas de la distinción entre lenguajes de alto nivel o bajo nivel. 


En fin, no sé si te ayudará algo, pero no te queden dudas que las tuyas me han servido a mí.

Saludos

Gabriela
Tú te enamoraste de mi valentía, yo me enamoré de tu oscuridad; tú aprendiste a vencer tus miedos, yo aprendí a no perderme en tu abismo.

ABDERRAMAH

CitarPero todavía estoy líado porque no me aclaro cómo está expresado o escrito el lenguaje máquina, si es con el sistema binario, el hexadecimal, o en lenguaje ensamblador?

Cada procesador tiene una sintaxis, por ejemplo supongamos que el primer byte indica la orden y el segundo y tercero los parámetros:

lo que en ensamblador mnemonico sería:

sum 5 10

si sumar se indica como "3" podría ser en ensamblador lo mismo que:

3 5 A

y en código máquina quedaría así:

00000011 00000101 00001010

Es un ejemplo simplificado, espero que haya quedado claro.


Aikanáro Anário

La imagen de wikipedia es la que me ha confundido:


Lenguaje de máquina del Intel 8088. El código de máquina en hexadecimal se resalta en rojo, el equivalente en lenguaje assembler en magenta, y las direcciones de memoria donde se encuentra el código, en azul. Abajo se ve un texto en hexadecimal y ASCII.

Según esa imagen y su descripción el lenguaje máquina está escrito en hexadecimal, pero si el lenguaje máquina es que el que entienden y con el que trabajan las computadoras, está escrito a base de 16 caracteres ¿a dónde queda el binario?
Lo que faltaba en internet: http://binar10s.blogspot.com/

ABDERRAMAH

ese código no está realmente escrito en hexadecimal, son un monton de bits, agrupados en bytes y interpretando cada byte como una cifra hexadecimal salen esos números. La notación hexadecimal se usa mucho para representar un byte binario.

Aikanáro Anário

Cita de: ABDERRAMAH en 21 Diciembre 2010, 08:28 AM
Cada procesador tiene una sintaxis, por ejemplo supongamos que el primer byte indica la orden y el segundo y tercero los parámetros:

lo que en ensamblador mnemonico sería:

sum 5 10

si sumar se indica como "3" podría ser en ensamblador lo mismo que:

3 5 A

y en código máquina quedaría así:

00000011 00000101 00001010

Es un ejemplo simplificado, espero que haya quedado claro.



Entonces quieres decir que el conjunto de instrucciones de cada procesador es lo que está escrito en Lenguaje Ensamblador (que usa el sistema hexadecimal), pero que cuando la computadora va a realizar una operación es ahí realmente cuando esas instrucciones se convierten a binario? :huh:
Lo que faltaba en internet: http://binar10s.blogspot.com/

ABDERRAMAH

Se puede decir así,digamos que el código siempre es binario, pero podemos coger cada bloque, que será un número determinado de bits e interpretarlo como un número por comodidad de lectura.

pucheto

Cita de: Aikanáro Anário en 21 Diciembre 2010, 21:50 PM
Entonces quieres decir que el conjunto de instrucciones de cada procesador es lo que está escrito en Lenguaje Ensamblador (que usa el sistema hexadecimal), pero que cuando la computadora va a realizar una operación es ahí realmente cuando esas instrucciones se convierten a binario? :huh:
Las operaciones se representan con un numero... las computadoras en general trabajan en binario ( hubo pc's de base 10 )... Vos lo q ves ahi en hexadecimal es una posible representacion de los numeros que representan cada operacion que queda comoda para su lectura...