2008-11-05 15 views

Respuesta

38

Machine code. Tiempo fue programadores codificados en el 1 y 0 de binario. Hex fue considerado un avance sobre esto. Eso fue antes del ensamblaje, que usa los nombres del código y separa las partes de una instrucción en sus partes.

+5

El código máquina es una traducción directa de Assembly, así que no diría que está debajo. – Marius

+5

@marius, Mi pc puede ejecutar código de máquina, pero no ensamblar. Entonces no es igual;). – Dykam

+5

No sé qué pueden hacer los programas de ensamblador de última generación en la actualidad, pero en los Días Antiguos, un macroensamblador podría hacer un poco de cosas automáticas para usted (entradas de función, haciendo un seguimiento del recuento de argumentos, asignación automática, expansión de macro condicional y otras cosas ordenadas que es una tarea rutinaria). Así que diría que el código de máquina es "más bajo" que el montaje por esa razón. – Vatine

2

Bueno, siempre puedes escribir código en binario (o hexadecimal, o alguna otra representación). A continuación, tendrá que calcular desplazamientos de salto, etc. en su cabeza. No recomendado. ;)

+0

Lo he hecho con 6502. Pero no creo que ingresar el código hexadecimal se pueda considerar un idioma ... ¡Hablo hex! :-) –

2

o menos. Las máquinas no leen ensamblaje, leen "lenguaje de máquina", que es en qué se convierte el ensamblaje. El lenguaje de máquina tiene "códigos de operación" en lugar de mnemónicos de ensamblaje, y estos códigos de operación son generalmente solo datos binarios. El código de máquina generalmente no se considera legible por humanos.

En los sistemas RISC, el código de máquina es a menudo una traducción directa del ensamblaje, pero en los sistemas x86, en particular, los dos son bastante diferentes.

+1

En realidad, en x86 también es una traducción directa. ¿Tienes algún ejemplo que demuestre lo contrario? –

70

En realidad, hay un nivel de código que se encuentra debajo del código de máquina, llamado Microcode.

+0

Considero que el microcódigo es un código de máquina. Solo una variante diferente que vive en el procesador, en lugar de ejecutarse desde la memoria RAM. –

+20

microcódigo es un bloque de ROM donde cada bit se usa para alternar algunos circuitos internos. una secuencia de 'palabras' guía a la CPU para realizar una sola instrucción de lenguaje de máquina, por lo tanto, está 'debajo' incluso del lenguaje de la máquina. – Javier

+4

Estoy de acuerdo con Javier. Construimos un procesador microcodificado como parte de un curso universitario una vez. ¡Muy divertido! –

2

Sure: "código máquina", sobre el cual, Wikipedia, en el artículo sobre Assembly Language (http://en.wikipedia.org/wiki/Assembly_language) dice: "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".

8

Si por debajo, te refieres a un nivel más bajo, entonces sí. Hay lenguaje de máquina. El ensamblaje se convierte en lenguaje de máquina antes de ejecutarse. En muchos procesos modernos, el lenguaje de máquina se emula en microcódigo. Ver this para más detalles sobre microcódigo.

3

Depende de por qué lo pregunta. No hay nada que no puedas hacer en ensamblaje que puedas hacer a través de otro método. El código de máquina es solo otra representación de los mismos datos exactos.

+2

No es 100% exacto .. No puede optimizar su ensamblaje a través de otro método. Quiero decir incluso una x * = 2; en C++ podría no compilarse hasta el ensamblaje más eficiente. Un ciclo for puede no usar el registro cx (8086). Hay cosas que solo puede hacer en serio ... Es por eso que todavía se usa como un lenguaje (por suma) – baash05

+2

En realidad, hay algunas cosas que ni siquiera se pueden hacer con el ensamblaje. Algunos tipos de código de auto modificación, o el uso de instrucciones como datos y viceversa. (en x86 con instrucciones de longitud variable ... las posibilidades ...) – Artelius

18

El ensamblaje es una representación de texto del código de máquina. Tiene una sola declaración que representa una sola instrucción dentro de la CPU. "MOV X, Y", por ejemplo, es una instrucción única que pasa a través de la CPU y mueve un valor X a la posición Y. Para obtener el código de máquina, la CPU tendrá un número que representa 'MOV', y un número que representa 'X' (si aún no es un número) y un número que representa Y. Estos valores binarios de HEX brutos son el código de máquina. Son los números los que hacen que la CPU dirija voltajes/corrientes a través de los transistores para que haga lo que hace.

El código de máquina es un nivel inferior, pero está muy cerca del ensamblaje. Está tan cerca, que nadie se molesta en usarlo debido a las ventajas de poder leer la instrucción "MOV" = mover. Los nombres de las variables también se vuelven legibles en lugar de direcciones sin procesar en la pila o el montón.

+5

Bueno, muchos ensambladores realmente permiten etiquetas para sustituir una dirección. Entonces, el ensamblaje no es solo una representación de texto del código de máquina. – Calyth

2

Incluso debajo del código de la máquina, podría decirse, está el diseño del chip VHDL. Ni siquiera necesita diseñar el chip para ejecutar el código, sino simplemente transformar las entradas en salidas.

(no es que yo soy un experto - Estoy usando C++)

+1

Pero después de construir el chip, realmente no se puede programar. Entonces no creo que sea realmente relevante. –

+2

Al usar esto en un FPGA, es _se_ reprogramable. Aún así, no soy un experto :) – xtofl

12

Y para ir aún más baja, (no es que la palabra "lengua" es apropiada para el lenguaje "máquina" o incluso para las capas inferiores físicos), pero debajo del lenguaje de la máquina está la configuración de las muchas compuertas y conmutadores utilizados para implementar cada opcode binario para el hardware (CPU) involucrado ... Un gran libro para leer que cubre este nivel aún más bajo es el de Charles Petzold, llamado "CODE"

3

Las primeras computadoras (ENIAC) usaron cableado duro para que la salida de un cómputo se pueda alimentar como entrada a otro. Para ejecutar otro programa, debe desconectar algunos cables y volver a conectarlos de manera diferente.

3

El ensamblador se traduce en código de máquina por el ensamblador. Podrías escribirlo con un editor binario. (¡Ay!) Las computadoras CISC pueden tener microcódigo, que secuencia los segmentos del chip (ALU, recuperación de memoria, etc.). Por lo general, nadie escribe microcódigo, excepto en el fabricante del chip.

3

Bueno, hay lenguaje de máquina, como han mencionado otros. El lenguaje de la máquina suele ser una traducción de 1 a 1 de lo que se escribe en el ensamblaje, por lo que está en el mismo nivel de abstracción que el código de ensamblaje; es mucho más difícil escribir a mano.

Existen excepciones a esto, como el pseudo-instructions provisto por el lenguaje ensamblador MIPS.

Hay, o tal vez debería decir era un nivel por debajo incluso del lenguaje de ensamblaje/máquina: microcode. Los presupuestos modernos de transistores lógicos son lo que son, sospecho que el microcódigo está perdiendo relevancia.

+3

Microcódigo definitivamente todavía está por aquí; es demasiado difícil y "no apto" para conectarlo todo. – Artelius

3

El lenguaje de ensamblaje es la planta más baja de la construcción del lenguaje de programación ya que el código de máquina no es un lenguaje porque no involucra reglas gramaticales a seguir. El código de máquina puede ser el único formato de datos para ejecutar operaciones de microprocesador: la CPU obtiene datos de la memoria y ejecuta las instrucciones directamente de acuerdo con el código de máquina que se haya obtenido.

Sin embargo, en algunos diseños recientes, como el Intel Pentium 4 y posteriores, el código de máquina es la expresión de un nivel más bajo de operaciones de unidad de ejecución RISC, conocidas como uops o microoperaciones. Entonces la lógica de descodificación de esos diseños es traducir las instrucciones de tipo CISC en uops pequeños que generalmente están dirigidos a una unidad de carga/almacenamiento más simple, similar a RISC. En este aspecto, podemos decir (aunque esto puede no ser técnicamente exacto) que el código de máquina describe las instrucciones complejas de "alto nivel" de la arquitectura, no las operaciones "reales" que se llevan a cabo atómicamente por la lógica de ejecución subyacente de la CPU .

Así que tenemos un conjunto de instrucciones arquitectónicas, o código de máquina arquitectónica, y un conjunto de "microinstrucciones" de nivel interno que está oculto del mundo exterior. La memoria caché de seguimiento de los procesadores Intel se concibió para almacenar tales operaciones para optimizar el rendimiento superescalar del procesador (ya que la CPU ejecuta uops, no el conjunto de instrucciones de arquitectura disponible para la ejecución por los programas).

6

Creo que lo más bajo que puede obtener es algo llamado Física o TRW (The Real World). Esto es lo que usan los diseñadores y fabricantes de chips para crear CPU y otros procesadores que pueden aprovechar el rendimiento de los lenguajes de computadora y convertirlos en algo valioso.

+1

Respuesta épica. Debería haber registrado marca TRW sin embargo. – NlightNFotis

1

Puede enviar corrientes eléctricas a la CPU y decirle dónde colocar los píxeles. (Bastante binario, pero no usa la computadora para escribirlo).

Cuestiones relacionadas