¿Cuál es la diferencia entre el código ensamblador y el código de lenguaje de máquina que obtenemos en un archivo objeto?

El sistema no entiende el código de ensamblaje.

El código de ensamblaje es una representación legible por humanos del código de máquina. También tiene detalles como etiquetas legibles en lugar de direcciones. La CPU no puede entender el código de ensamblaje.

Se parece a esto: (pellizcado de Hello, world!)

sección .text
global _start; debe declararse para el enlazador (ld)
_start:; decir el punto de entrada del enlazador
mov edx, len; longitud del mensaje
mov ecx, msg; mensaje para escribir
mov ebx, 1; descriptor de archivo (stdout)
mov eax, 4; número de llamada del sistema (sys_write)
int 0x80; núcleo de llamada
mov eax, 1; número de llamada del sistema (sys_exit)
int 0x80; núcleo de llamada

sección .data

msg db ‘¡Hola, mundo!’, 0xa; nuestra querida cadena
len equ $ – msg; longitud de nuestra querida cadena

El código de máquina es en lo que un ensamblador convierte el lenguaje ensamblador. El código de máquina es lo que la CPU entiende de forma nativa. Estos son los bytes / bits sin procesar que podría observar dentro de ROM / RAM que la CPU leerá y ejecutará.

Si hiciera un volcado hexadecimal de código de máquina, se vería así (tenga en cuenta que esto no es * una * representación del código anterior, sino galimatías al azar):

cd 80 32 54 0a cd 80 40 31 34 65 8f

Hay un nivel intermedio que es el código objeto. Este es un ensamblador traducido al código de máquina, sin embargo, contiene un poco más que eso. Estrictamente hablando, el código objeto todavía no es código máquina, ya que aún contendría etiquetas. El vinculador convierte un montón de archivos de objetos y bibliotecas en un archivo ejecutable y normalmente elimina todas las etiquetas a medida que se resuelven.

Si somos realmente pedantes, un ejecutable todavía no es código de máquina: un ejecutable solo se convierte en código de máquina una vez que se carga en la memoria y se han resuelto todas las referencias externas (DLL / bibliotecas dinámicas).

El sistema solo puede entender el código de ensamblaje según mi entendimiento. – Tu comprensión está mal.

El procesador solo puede entender 0s y 1s , que no es más que un bajo y alto nivel de voltajes, por lo que sea cual sea el código que escriba, ya sea en ensamblado o C o C ++, el código debe traducirse a 0s y 1s, que finalmente se llama máquina Código de lenguaje. Por lo tanto, el archivo de objeto solo tendrá el código de máquina, que es la combinación de 1s y 0s.

Por lo tanto, todo su código se convertirá finalmente en 1s y 0s y se cargará en la memoria como niveles de voltaje HIGH (1) y LOW (0). El procesador leerá este nivel de voltaje como 1s y 0s y lo ejecutará.

La vinculación es el proceso de vincular todos los archivos de objetos, por lo que finalmente obtendrá un binario ejecutable que el procesador puede cargar en la memoria y ejecutar.

Entonces, incluso si escribe código de ensamblaje, el código de ensamblado se convertirá en código de lenguaje de máquina (1s y 0s), luego solo se puede cargar y ejecutar.

More Interesting

¿La experiencia de ingeniería de despliegue en Palantir explicaría la experiencia como ingeniero de software? ¿Se podrá hacer un cambio de Palantir (ingeniero de despliegue) a Google (ingeniero de software)?

¿Quiénes son los principales actores de Agile Software? (Empresas que venden software para el desarrollo de software Agile)

¿Cómo DevOps ayudará al probador manual con más de 10 años de experiencia?

¿La administración del control de versiones y los servidores de compilación forman parte de DevOps?

Necesito un buen libro para comenzar a aprender ARMv8 Assembly, ¿alguna sugerencia?

¿Qué crees que será diferente sobre cómo se diseña y construye el software en 2020?

¿Cómo sería el mundo sin lenguajes de programación?

¿Qué es Selenium RC y para qué se utiliza?

¿Cuáles son los conceptos básicos de la programación?

¿Debo dejar mi trabajo? Soy ingeniero de software (desarrollador de Java con 11 años de experiencia) trabajando para una empresa de consultoría.

¿Cuánto formalismo de planificación de proyectos necesita un equipo de desarrollo de cinco personas?

¿Vale la pena la maestría en administración de software en Carnegie Mellon?

¿Cuáles son algunas de las ventajas y desventajas de hacer una Maestría en Ciencias de la Computación (MS CS) para alguien con una Licenciatura en Ciencias de la Computación de una de las principales universidades indias / chinas, que actualmente trabaja en una subsidiaria local de una importante compañía de software de los Estados Unidos?

¿Por qué .NET no es tan multiplataforma como Java?

¿Por qué Accenture acepta a alguien de cualquier curso y simplemente lo convierte en un probador de software sin tener en cuenta sus habilidades y antecedentes reales?