2009-11-23 50 views
15

Mientras busco las diversas diferencias en los significados del código fuente, bytecode, código ensamblador, código máquina, compiladores, enlazadores, intérpretes, ensambladores y todo lo demás, solo me confundí sobre la diferencia entre bytcode y código ensamblador.¿Cuál es la diferencia entre el código de ensamblaje y el bytecode?

Particularmente la introducción de este wikipedia article para describir CIL me confundió ya que parece usar ambos términos (código de ensamblado y bytecode) indistintamente haciéndome pensar que podrían significar exactamente lo mismo.

+0

Si tiene acceso al libro Organización Estructurada de Computadoras de Andrew Tanenbaum, tendrá una definición técnicamente correcta de los dos términos. –

+0

Véase también p. [esta respuesta] (http://stackoverflow.com/a/2203296/874188) a una pregunta similar sobre Java. – tripleee

+0

Consulte también http://stackoverflow.com/questions/17511931/what-excaly-is-bytecode – tripleee

Respuesta

2

Assembly code normalmente se utiliza para referirse al código que, una vez compilado en Machine Code, puede ser ejecutado por una CPU mientras bytecode en una máquina virtual.

La fuente de confusión sobre CIL podría estar relacionada con el hecho de que machine code para CPU X puede ser interpretado por una máquina virtual que se ejecuta en la CPU Y (por ejemplo).

Nota en que la aplicación de la máquina virtual puede ser elaborado para interpretar cualquier código y/o código de bytes la máquina: se deja a los desarrolladores y su aspiración (y tiempo en sus manos) ;-)

+0

Una vez más: el código de ensamblaje no se ejecuta con una CPU real. Lo que se ejecuta es "Código de máquina". El código de ensamblaje es la forma legible por humanos de un código de máquina (o en algunos casos: código de bytes). – Juergen

+0

sí ... lo siento ... – jldupont

-1

El código de ensamblaje es (representa) el código nativo para el procesador que está programando.

Bytecode es un término para la versión binaria de los "comandos" compilados para ser ejecutados por un intérprete o una máquina virtual.

En esencia, los bytecodes definen los códigos de operación para un procesador virtual, mientras que el ensamblaje consiste en los códigos de operación de un procesador físico. (vamos a ignorar el microcódigo dentro de la CPU por ahora :-))

+2

No es del todo correcto. El código de ensamblaje es la forma humana legible de un código de máquina. El código máquina es el código nativo de un procesador. – Juergen

+0

@Juergen, se mezcla la forma y el contenido, es una cuestión de detalles o contexto que decide entre terminología como "códigos de operación de la CPU", "lenguaje de máquina", "ensamblador". En el contexto de la pregunta de OP son equivalentes. – rsp

+0

En mi humilde opinión, se mezclan las cosas, dado que las personas de TI a menudo son poco estrictas en sus palabras, las cosas se vuelven confusas. El lenguaje de ensamblaje es una representación legible por humanos de algún lenguaje de máquina (también puede ser una máquina virtual, por ejemplo, bytecode). Ver el artículo de wikipedia que vinculé en mi respuesta. – Juergen

0

ensamblador es un lenguaje de macros. Es un conjunto de instrucciones usadas para instruir a la CPU u otro dispositivo. Se traduce en código de máquina que son instrucciones legibles por la CPU.

Los códigos de bytes s son instrucciones para interpretar la máquina virtual y aún deben traducirse al código de la máquina antes de ser ejecutados.

+0

ensamblador no es necesariamente un lenguaje de macros. Ensamblador en su forma básica es solo una forma de código máquina legible por humanos. – Juergen

11

El código de ensamblaje normalmente significa la forma legible para el lenguaje nativo de una máquina (el llamado lenguaje de máquina). El código de bytes, por otro lado, es un lenguaje que puede ser interpretado por un intérprete de código de bytes, por lo que no es el lenguaje nativo del procesador.

¿Por qué la confusión, entonces? No se puede comparar el lenguaje ensamblador con el código Byte de esta manera. Por supuesto, un código de bytes también puede tener un código de ensamblado, es decir, una forma legible por humanos, porque "lenguaje ensamblador" no significa necesariamente que sea para una máquina real, sino que es una forma legible por humanos de algún lenguaje nativo. - para procesadores, este idioma nativo es el código de máquina, pero también puede tener el código de ensamblado de una máquina pseudo- (o interpretada) como Bytecode.

Consulte también: Assembly Language

más angustia viene por supuesto - como se puede ver en toda la discusión aquí - porque la gente de TI (también a mí mismo) tienden a ser negligentes en la redacción. El "lenguaje de ensamblaje" se usa a menudo cuando se habla de código de máquina. Esto, por supuesto, no es totalmente correcto, porque Assembly Language es solo la forma legible por humanos del código de algunas máquinas.

+0

Lo que hacen las personas de TI (con suerte) es abstraerse de la forma. La asignación entre el código de máquina y el ensamblaje se lleva a cabo para optimizar la audiencia, la CPU o el ser humano. – rsp

0

El código ensamblado se puede ejecutar en una CPU con un conjunto de instrucciones específico, mientras que el bytecode se puede ejecutar en una máquina virtual (como el tiempo de ejecución Java) en cualquier CPU que pueda ejecutar la VM.

+0

El "código ensamblado" también se denomina "código de máquina", solo para aclaración. Ver el enlace en mi respuesta. – Juergen

+0

Cuando ha querido decir "Código de ensamblaje", por supuesto, esto no es código de máquina, ya que primero debe ensamblarse mediante un Ensamblador, el resultado es el código de máquina. – Juergen

1

Recuerdo que desde el comienzo de los microcontroladores y microprocesadores, la palabra Asamblea se usó para designar el código de máquina de una manera legible por humanos. Me parece que Microsoft ha causado confusión mediante el uso de la misma palabra "Asamblea" para nombrar lo que sería el ByteCode producido por sus compiladores dotNET Framework. Entonces, en este caso, diría que lo que "Bytecode" significa para el tiempo de ejecución de Java es similar a lo que significa este nuevo uso de la palabra "Assembly" para el entorno Microsoft dotNET runTime. ¿Me equivoco al asumir eso?

Cuestiones relacionadas