ventajas tipos tipo maquina lenguaje leer instrucciones historia como codigo caracteristicas assembly machine-code object-code

assembly - leer - tipos de lenguaje de maquina



Código de ensamblaje vs Código de máquina vs Código de objeto? (8)

Código de montaje se discute here .

"Un lenguaje ensamblador es un lenguaje de bajo nivel para la programación de computadoras. Implementa una representación simbólica de los códigos de máquina numéricos y otras constantes necesarias para programar una arquitectura de CPU particular".

El código de máquina se discute here .

"El código de máquina o el lenguaje de máquina es un sistema de instrucciones y datos ejecutados directamente por la unidad central de procesamiento de una computadora".

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

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

¿Puedes dar un ejemplo visual de su diferencia?


Creo que estas son las principales diferencias.

  • legibilidad del código
  • control sobre lo que está haciendo su código

La legibilidad puede hacer que el código sea mejorado o sustituido 6 meses después de su creación con un poco de esfuerzo, por otra parte, si el rendimiento es crítico, es posible que desee utilizar un lenguaje de bajo nivel para dirigirse al hardware específico que tendrá en producción, para obtener Ejecución más rápida.

En la actualidad, las computadoras de IMO son lo suficientemente rápidas para permitir que un programador obtenga una ejecución rápida con OOP.


El código de ensamblaje es una representación humana del código de máquina:

mov eax, 77 jmp anywhere

El código de la máquina es código hexadecimal puro:

5F 3A E3 F1

Supongo que te refieres al código objeto como en un archivo objeto. Esta es una variante del código de máquina, con una diferencia de que los saltos están parametrizados de manera tal que un enlazador puede completarlos.

Se utiliza un ensamblador para convertir el código de ensamblaje en código de máquina (código de objeto) Un enlazador vincula varios archivos de objeto (y biblioteca) para generar un ejecutable.

Una vez escribí un programa de ensamblador en hexadecimal puro (no hay ensamblador disponible) por suerte esto fue hace mucho tiempo en el viejo 6502 (antiguo). Pero me alegro de que haya ensambladores para los códigos de operación del pentium.


El ensamblaje es un término breve y descriptivo que los humanos pueden entender que se puede traducir directamente al código de máquina que realmente usa una CPU.

Si bien es algo comprensible para los humanos, el ensamblador sigue siendo de bajo nivel. Se necesita mucho código para hacer algo útil.

Así que en lugar de eso, usamos lenguajes de nivel superior como C, BÁSICO, FORTAN (OK, sé que he salido con mi pareja). Cuando se compilan estos producen código objeto. Los primeros idiomas tenían el lenguaje de máquina como su código objeto.

Muchos idiomas hoy en día, como JAVA y C #, generalmente se compilan en un código de bytes que no es un código de máquina, sino uno que se interpreta fácilmente en el tiempo de ejecución para producir un código de máquina.


Las otras respuestas dieron una buena descripción de la diferencia, pero también solicitó una imagen visual. Aquí hay un diagrama que muestra el viaje desde un código C a un ejecutable.


Un punto que aún no se menciona es que hay algunos tipos diferentes de código de ensamblaje. En la forma más básica, todos los números utilizados en las instrucciones deben especificarse 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 bit de código anterior, si se almacena en la dirección $ 1900 en un cartucho Atari 2600, mostrará un número de líneas en diferentes colores extraídos de una tabla que comienza en la dirección $ 1437. En algunas herramientas, escribir una dirección, junto con la parte más a la derecha de la línea de arriba, almacenaría en la memoria los valores que se muestran en la columna central, e iniciaría la siguiente línea con la siguiente dirección. Escribir código en esa forma era mucho más conveniente que escribir en hexadecimal, pero uno tenía que saber las direcciones precisas de todo.

La mayoría de los ensambladores permiten usar direcciones simbólicas. El código anterior se escribiría más como:

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

El ensamblador ajustaría automáticamente la instrucción LDA para que hiciera referencia a cualquier dirección asignada a la etiqueta ColorTbl. El uso de este estilo de ensamblador hace que sea mucho más fácil escribir y editar código de lo que sería posible si uno tuviera que escribir manualmente y mantener todas las direcciones.


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

mov ebx, [ebp+32h] es ensamblador

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


El código de máquina es un código binario (1 y 0) que puede ser ejecutado directamente por la CPU. Si abriera un archivo de código de máquina en un editor de texto, vería basura, incluyendo caracteres no imprimibles (no, no esos caracteres no imprimibles;)).

El código de objeto es una parte del código de máquina que aún no se ha vinculado a un programa completo. Es el código de máquina para una biblioteca o módulo en particular que conformará el producto completado. También puede contener marcadores de posición o compensaciones que no se encuentran en el código de máquina de un programa completado. El enlazador utilizará estos marcadores de posición y compensaciones para conectar todo entre sí.

El código de ensamblaje es un código fuente de texto simple y (en cierto modo) legible por humanos que en su mayoría tiene un análogo directo 1: 1 con las instrucciones de la máquina. Esto se logra utilizando mnemónicos para las instrucciones reales, registros u otros recursos. Los ejemplos incluyen JMP y MULT para las instrucciones de salto y multiplicación de la CPU. A diferencia del código de máquina, la CPU no entiende el código de ensamblaje. Con el uso de un ensamblador o un compilador , usted convierte el código de ensamblaje a una máquina, aunque generalmente pensamos en compiladores asociados con un lenguaje de programación de alto nivel que se abstrae más allá de las instrucciones de la CPU.

Crear un programa completo implica escribir código fuente para el programa en cualquier ensamblaje o en un lenguaje de nivel superior como C ++. El código fuente se ensambla (para el código de ensamblaje) o se compila (para lenguajes de nivel superior) a código de objeto, y los módulos individuales se vinculan entre sí para convertirse en el código de máquina para el programa final. En el caso de programas muy simples, el paso de enlace puede no ser necesario. En otros casos, como con un IDE (entorno de desarrollo integrado), el enlazador y el compilador pueden invocarse juntos. En otros casos, se puede usar un archivo de solución o script de creación complicado para decirle al entorno cómo construir la aplicación final.

También hay lenguajes interpretados que se comportan de manera diferente. Los idiomas interpretados se basan en el código de máquina de un programa de intérprete especial. En el nivel básico, un intérprete analiza el código fuente e inmediatamente convierte los comandos en un nuevo código de máquina y los ejecuta. Los intérpretes modernos, a veces también llamados tiempo de ejecución o máquina virtual , son mucho más complicados: evaluar secciones enteras de código fuente a la vez, almacenar en caché y optimizar cuando sea posible, y manejar tareas complejas de administración de memoria. Un lenguaje interpretado también puede precompilarse a un lenguaje intermedio o de código intermedio de nivel inferior, similar al código de ensamblaje.