Código de la asamblea vs código Máquina vs código Objeto?

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

Puede dar un ejemplo visual de su diferencia?

  • También estoy curioso acerca de donde se hizo el «código objeto» nombre proviene? ¿Qué hace el «objeto» de la palabra se supone que significa eso en ella? Es de alguna manera relacionados con la programación orientada a objetos o simplemente una coincidencia de nombres?
  • código Objeto.
  • No estoy preguntando acerca de lo que es un objeto de código, Capitán Obvio. Estoy preguntando sobre donde hice el nombre proviene y por qué se llama «objeto» de código.
InformationsquelleAutor mmcdole | 2009-01-21

10 Kommentare

  1. 275

    Código máquina es binario (1 y 0) de código que puede ser ejecutado directamente por la CPU. Si se va a abrir un fichero en código máquina en un editor de texto que iba a ver basura, incluyendo los caracteres no imprimibles (no, no los caracteres no imprimibles 😉 ).

    Código objeto es una porción de código máquina que aún no se ha vinculado a un programa completo. Es el código de la máquina para una determinada biblioteca o módulo que va a hacer hasta el producto terminado. También puede contener marcadores de posición o compensaciones que no se encuentran en el código máquina de un programa. El enlazador hará uso de estos marcadores de posición y desplazamientos para conectar todo junto.

    Asamblea código es el texto plano y (un poco) de humanos de lectura capaz de código fuente, que en su mayoría tiene un efecto directo 1:1 analógica con las instrucciones de la máquina. Esto se logra usando mnemotécnicos para las reales instrucciones, registros, u otros recursos. Los ejemplos incluyen JMP y MULT para la CPU del salto y la multiplicación de las instrucciones. A diferencia del código de la máquina, la CPU no entiende el código de la asamblea. Convertir código ensamblador de la máquina con el uso de un ensamblador o un compilador, aunque normalmente pensamos en los compiladores en asociación con un alto nivel de lenguaje de programación que se extraen más de la las instrucciones de la CPU.

    La construcción de un programa completo implica la escritura de código fuente para el programa, tanto en la asamblea o en un lenguaje de alto nivel, como C++. El código fuente está montado (para el montaje de código) o compilado (para lenguajes de alto nivel) a código objeto, y cada uno de los módulos están conectados entre sí para convertirse en el código de la máquina para el final del programa. En el caso de programas muy simples la vinculación de paso puede no ser necesario. En otros casos, como con un IDE (entorno de desarrollo integrado) que el enlazador y el compilador puede ser invocada juntos. En otros casos, un complicado hacer script o solución archivo puede utilizarse para indicar el medio ambiente cómo construir la aplicación final.

    También hay lenguajes interpretados que se comportan de manera diferente. Lenguajes interpretados se basan en el código máquina de un intérprete especial del programa. En el nivel básico, un intérprete analiza el código fuente y de inmediato se convierte los comandos nuevo código de la máquina y las ejecuta. Los modernos intérpretes, a veces también llamada en tiempo de ejecución medio ambiente o máquina virtual, son mucho más complicada: la evaluación de toda la secciones de código fuente en un momento, el almacenamiento en caché y optimización de donde sea posible, y el manejo de complejas tareas de administración de memoria. Un lenguaje interpretado también puede ser pre-compilado a un menor nivel intermedio de idioma o el código de bytes, similar a la de la asamblea de código.

    • +1: bien, pero simplifica respuesta – no todas las instrucciones de montaje son traducidos 1:1 a las instrucciones de la máquina, y el objeto de archivos también pueden contener otros datos (reubicación de la información, las tablas de símbolos, …)
    • Añade una palabra de la comadreja para su primer número, editado a hacer la 2ª más clara.
    • usted dice que «no todas las instrucciones de montaje son traducidos 1:1 a las instrucciones de la máquina» por favor dar un ejemplo.
    • Arquitecturas RISC a veces proporcionar una asamblea virtual nivel de conjunto de instrucciones – por ejemplo, MIPS pseudo-instrucciones ( en.wikipedia.org/wiki/MIPS_architecture#Pseudo_instructions )
    • Es cualquier sobrecarga adicional alguna creado mediante asamblea, en lugar de código de máquina? Acabo de leer en algún lugar que no existe y desea confirmar que. Usted dijo algo en esta respuesta que es casi un «sí», pero no del todo allí.
    • Código máquina es el único código que nunca se ejecuta. Antes de la asamblea de código se puede ejecutar en un ordenador, de un programa de ensamblador debe convertir primero en código de máquina. En ese contexto, su pregunta no tiene sentido, porque en tiempo de ejecución son la misma cosa.
    • En otras palabras, no va a través de la asamblea y de un ensamblador de crear una sobrecarga en el producto terminado, como no va a través de un alto nivel de lenguaje de programación y un compilador? Hace extra, unncessary código máquina llegar a poner en por el ensamblador, de la misma manera que extra, innecesaria asamblea código se coloca en un compilador?
    • Nada se añade por el ensamblador. Es una directamente de la traducción de lo que usted escribió reales de instrucciones de la máquina. Y no me llame el código adicional por los compiladores de «innecesaria»
    • Eso es una agradable sorpresa. Gracias.
    • Es válido decir que el código máquina es una colección de los archivos de código objeto para su diseño?
    • Desde un cierto punto de vista, pero no de la manera que yo normalmente pienso de ella.
    • lo que crea el código máquina y el código objeto? Es el ensamblador, compilador, o algo más? La página de la wiki para el lenguaje ensamblador dice el ensamblador crea el código objeto, pero, a continuación, la página de la wiki de la página de código objeto, dice el compilador genera código objeto.
    • tanto un ensamblador y el compilador puede crear código objeto. Si se inicia desde la asamblea de código, se utiliza un ensamblador. Si usted comienza a partir de un lenguaje de alto nivel, se utiliza un compilador.
    • ¿y el código de la máquina? Lo que crea el código de la máquina? Estoy teniendo problemas para entender las diferencias de código de máquina y el código objeto.
    • Generalmente, es el enlazador o algunos cargador dinámico. Se necesita el código objeto y llena esos vacíos con direcciones reales de memoria. También puede reubicar el código objeto a alguna otra dirección.
    • – – todo en un equipo es binario.

  2. 121

    Las otras respuestas dio una buena descripción de la diferencia, sino que pidió un visual también. Aquí es un diagrama que muestra que viaje desde C código a un archivo ejecutable.

    Código de la asamblea vs código Máquina vs código Objeto?

    • Esto me parece realmente útil, pero falta el «código de Máquina» de la etiqueta
    • Entonces, cuando está en el código ejecutable, es que su equivalente en código de máquina?
    • En el contexto de este diagrama, el «código objeto» es el código máquina.
    • En realidad, tanto el código objeto y el código ejecutable de una máquina de códigos. la diferencia es que el código objeto no es el completado el programa. Debe ser combinado con otro ayudante de biblioteca/módulo de códigos como se indica en el diagrama para formar un completo programa ejecutable/código.
    • en qué nivel sería correcto decir que es ejecutado directamente por el procesador? Después de que el ensamblador, después de que el enlazador, después del cargador, después de que se convirtió al microcontrolador?
  3. 47

    Código de ensamblado es legible para humanos, en representación de código de máquina:

    mov eax, 77
    jmp anywhere
    

    Código máquina es puro código hexadecimal:

    5F 3A E3 F1
    

    Supongo que te refieres a código objeto como en un archivo objeto. Esta es una variante de código de máquina, con la diferencia de que los saltos son una especie de parametrizada de tal manera que un enlazador puede rellenar.

    Un ensamblador se utiliza para convertir el código ensamblador a código máquina (código objeto)
    Un enlazador de enlaces de varios objetos (y biblioteca) archivos para generar un ejecutable.

    Tengo una vez escrito un programa de ensamblador puro hex (no ensamblador disponible) por suerte esto fue camino de vuelta en la buena vieja (antigua) 6502. Pero me alegro de que hay montadores para el pentium códigos de operación.

    • No, No, no, no. Código de la máquina no es código hexadecimal. es pura binario. Código hexadecimal es sólo una representación conveniente de binario.
    • Si realmente vamos a los extremos, no es binario, es una cantidad de electricidad en un circuito. 😉
    • sin duda, es posible escribir un programa binario usando un editor hexadecimal. Por supuesto, los dígitos hexadecimales introducidos corresponden a la intención de instrucciones y datos. Desordenado, pero factible. Lo he utilizado para parches binarios (firmware) de las imágenes con las correcciones de errores. Yo prefiero tener un poco más que el editor hexadecimal, aunque 🙂
    • Sí, por supuesto. Existe una relación entre el hexadecimal, y lo que ustedes llamarían «Código de Máquina», pero no es muy exacto decir hexadecimal es del código de la máquina. Eso es todo lo que estoy tratando de decir.
    • Yo solía programa Z80 código máquina en decimal. En aquellos días, nunca he entendido el punto de hex. Nunca he programado en binario, pero me hizo escribir varios de disco duro y los de curso tienen que lidiar en los unos y los ceros que componen las instrucciones.
    • En ese sentido, no hay tal cosa como «código hexadecimal» a la derecha? «Código hexadecimal» es sólo una forma de ver el código de la máquina. Usted puede ver el código de la máquina en hexadecimal, binario, octal, decimal o como más te guste. También de nuevo en ese sentido, no existe un «código binario» así. De nuevo, «código binario» es sólo una forma de ver el código de la máquina.
    • Lo que dices en realidad no tiene mucho sentido.. Binario es una forma de representación, como hexadecimal. Si no es hexagonal, no es binario cualquiera.
    • El punto de hex es que es una casa notación abreviada para los binarios. Cada uno de los dígitos hexadecimales de los mapas directamente en 4 bits: 0000=0, 0001=1, 0010=2, 0011=3, 0100=4, 0101=5, 0110=6, 0111=7, 1000=8, 1001=9, 1010=Una, 1011=B, 1100=C, 1101=D, 1110=E, 1111=F. por Lo tanto usted puede codificar cada mordisco de un byte por un dígito hexadecimal, dos dígitos hexadecimales para un byte. Si usted sabe la asignación, usted puede bastante mucho figura a cabo los bits binarios mirando a los dígitos hexadecimales. No es fácil con un decimal, a pesar de que, debido a que para los dígitos decimales de la asignación no es 1:1. Por eso hex es preferible.
    • Sí, finalmente, llegué a entender el punto de hex, pero 12-año-viejo-yo no tenía ningún uso de ella (-:
    • 77 debe ser 4D (64+13), fue la representación de texto intencionalmente galimatías, o hay una razón por la específica hex hay

  4. 18

    8B 5D 32 es código máquina

    mov ebx, [ebp+32h] es la asamblea

    lmylib.so que contiene 8B 5D 32 es el código objeto

  5. 8

    Un punto no mencionado aún es que hay unos pocos tipos diferentes de código de ensamblaje. En la forma más básica, todos los números que se utilizan en las instrucciones deben ser especificados como constantes. Por ejemplo:

    $1902: BD 37 14 : LDA $1437,X 
    $1905: 85 03 : STA $03 
    $1907: 85 09 : STA $09 
    $1909: CA : DEX 
    $190A: 10 : BPL $1902 
    

    El anterior fragmento de código, si se almacena en la dirección $1900 en un cartucho de Atari 2600, se mostrará un número de líneas de diferentes colores se obtienen de una tabla que comienza en la dirección $1437. En algunas herramientas, escribiendo en una dirección, junto con la parte trasera de la línea de arriba, podría almacenar en la memoria los valores que se muestran en la columna del medio, y el inicio de la siguiente línea con la siguiente dirección. Escribir el código en el formulario fue mucho más cómodo que escribir en hexadecimal, pero uno tenía que conocer con precisión las direcciones de todo.

    La mayoría de los ensambladores permiten utilizar direcciones simbólicas. El código anterior podría ser escrito como:

    rainbow_lp: 
    lda ColorTbl,x 
    sta WSYNC 
    sta COLUBK 
    dex 
    bpl rainbow_lp 
    

    El ensamblador sería ajustar automáticamente la LDA instrucción para que se refieren a lo que la dirección se asigna a la etiqueta ColorTbl. El uso de este estilo de ensamblador hace que sea mucho más fácil para escribir y editar código de lo que sería posible si uno tiene a mano la clave y la mano de mantener todas las direcciones.

    • +1. Uno más, el punto adicional: también hay diferentes clases de lenguaje ensamblador, sintaxis, el más famoso de ser Intel y AT&T.
    • Cómo acerca de Intel 8080 mnemotécnicos vs Zilog Z80? Me imagino que es anterior a la de Intel vs AT&T sintaxis de la guerra.
    • No argumentando, que acabo de mencionar ese aspecto (diferente de la sintaxis), y dio un ejemplo de dos de los más populares/conocida/famosa de la sintaxis.
  6. 3

    Código fuente, código de la Asamblea, del código de la Máquina, el código Objeto, código de Bytes, un archivo Ejecutable y el archivo de Biblioteca.

    Todos estos términos son a menudo muy confuso para la mayoría de las personas por el hecho de que piensan que son mutuamente excluyentes. Ver el diagrama para entender sus relaciones. La descripción de cada término es la siguiente.

    Código de la asamblea vs código Máquina vs código Objeto?

    Código fuente

    Instrucciones legible por los humanos (programación) idioma

    De alto nivel código

    Instrucciones escritas en un nivel alto (programación) idioma

    por ejemplo, C, C++ y Java programas

    Código de la asamblea

    Instrucciones escritas en un lenguaje ensamblador (tipo de bajo nivel lenguaje de programación).
    Como el primer paso del proceso de compilación, de alto nivel de código se convierte en esta forma. Es la asamblea de código que luego se convierte en código de máquina. En la mayoría de los sistemas, estos dos pasos se realizan de forma automática como parte del proceso de compilación.

    por ejemplo, el programa.asm

    Código objeto

    El producto de un proceso de compilación. Puede ser en forma de código máquina o código de bytes.

    por ejemplo, el archivo.o

    Código de la máquina

    Instrucciones en lenguaje de máquina.

    por ejemplo, un.fuera

    De código de bytes

    Instrucción en una forma intermedia, que puede ser ejecutado por un intérprete, tales como la JVM.

    por ejemplo, archivo de clase Java

    Archivo ejecutable

    El producto de la vinculación de proceso. Ellos son de código de máquina que puede ser ejecutado directamente por la CPU.

    por ejemplo, un .archivo exe.

    Nota de que en algunos contextos un archivo que contiene el byte de código de secuencias de comandos o instrucciones en el idioma, también puede ser considerado ejecutable.

    Archivo de biblioteca

    El código se compila en esta forma por diferentes razones, tales como la re-usabilidad y más tarde utilizado por los archivos ejecutables.

    • Yo diría que no toda la asamblea es verdaderamente fuente en el sentido más estricto del código escrito y/o mantenidos por los seres humanos. A menudo es generada por el equipo de la fuente, y no aptas para el consumo humano (por ejemplo, gcc realmente crea la asm texto que se alimenta a una ensamblador, en lugar de tener un built-en ensamblador dentro de la cc1 ejecutable). Creo que el asm círculo debe sobresalir por la parte izquierda de la «fuente» del círculo, porque algunos asm es sólo asm, no de origen. Nunca es objeto código, por supuesto, pero algunos asm es un paso en el camino de fuente a objeto de archivos.
    • Muchas gracias por el comentario. Yo no era consciente de lo que usted dijo sobre el trabajo de gcc. Sin embargo, me temo que si estoy de acuerdo contigo completamente. Lo que quiero decir es, su código fuente es algo escrito utilizando un formato legible lenguaje de programación. Puede o no puede ser escrita o mantenidas por los seres humanos. Estoy seguro de que usted será consciente de transcompilers. Desde su punto de vista, la categoría en la cual se coloca el producto de un compilador? Código fuente o algo más? Por favor me corrija si estoy equivocado. Además los comentarios son siempre bienvenidos.
  7. 1

    Asamblea se discute el código aquí.

    «Lenguaje ensamblador es un programa de bajo nivel lenguaje de programación de computadoras. Se implementa una representación simbólica de los valores numéricos de la máquina de códigos y constantes necesarias para el programa de una particular arquitectura de la CPU.»

    Máquina se discute el código aquí.

    «Código de máquina o lenguaje de máquina es un sistema de datos e instrucciones que se ejecutan directamente por un equipo de la unidad central de procesamiento.»

    Básicamente, de código ensamblador es el lenguaje y es traducido a código objeto (el código nativo que se ejecuta la CPU) por un ensamblador (análogo a un compilador).

  8. 1

    Creo que estas son las principales diferencias

    • la legibilidad del código
    • control sobre lo que es el código haciendo

    Legibilidad pueden hacer que el código mejorado o sustituido 6 meses después de que fue creado con poco esfuerzo, por otro lado, si el rendimiento es crítico que usted desea, puede utilizar un bajo nivel de idioma de destino con el hardware tenga en la producción, así que para conseguir una ejecución más rápida.

    OMI hoy en día las computadoras son lo suficientemente rápido como para permitir que un programador de obtener una rápida ejecución con la programación orientada a objetos.

  9. 1

    Asamblea es corto términos descriptivos los seres humanos pueden entender que puede ser traducido directamente en el código de la máquina que una CPU que se utiliza realmente.

    Mientras algo comprensible por los humanos, Ensamblador es todavía bajo nivel. Se necesita una gran cantidad de código para hacer algo útil.

    Vez de ello podemos utilizar lenguajes de alto nivel como C, BASIC, FORTAN (OK, sé que he de fecha mí mismo). Cuando se compila estas producir código objeto. Principios de lenguas lenguaje de máquina como su código de objeto.

    Muchos idiomas hoy en día como JAVA y C# generalmente de compilar en un bytecode que no es código máquina, pero que pueden ser fácilmente interpretadas en tiempo de ejecución para producir código máquina.

    • Tu comentario acerca de Java y C# – ambos usan Sólo En Tiempo de compilación, por lo que bytecode no interpretted. C# (.NET en general) que compila el Lenguaje Intermedio (IL), que es luego JITed en lenguaje máquina nativo de la CPU de destino.
  10. -1

    Los archivos de código fuente de los programas se compilan en los archivos de objeto y, a continuación, el enlace de los enlaces de los archivos de objetos entre sí, produciendo un archivo ejecutable, incluyendo su arquitectura de la máquina de códigos.

    Tanto objeto de archivo y el archivo ejecutable implica la arquitectura de la máquina de código en el formulario de imprimibles y no imprimibles de caracteres cuando se abre un editor de texto.

    Sin embargo, la dicotomía entre los archivos es que el archivo objeto(s) puede contener sin resolver referencias externas (tales como printf, por ejemplo). Así, es posible que deba ser enlazado con otros archivos de objeto.. es decir, las cuestiones pendientes en las referencias externas son necesarias para ser resueltos con el fin de obtener la decente ejecutable archivo ejecutable mediante la vinculación con otros archivos de objetos tales como C/C++ runtime library.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea