Las instrucciones de ensamblaje son (generalmente) una asignación directa a los códigos de operación, que son valores (múltiples) bytes del código de máquina que el procesador puede interpretar directamente. Es bastante posible escribir un programa en códigos de operación directamente buscándolos desde una tabla (como esta para el microprocesador 6039 , por ejemplo) que los enumera con las instrucciones de ensamblaje correspondientes y las direcciones de memoria / compensaciones para determinar las cosas a mano. como saltos
Los primeros programas se realizaron exactamente de esta manera: códigos de operación escritos a mano.
Sin embargo, la mayoría de las veces es más sencillo usar un ensamblador para "compilar" el código de ensamblaje, que realiza automáticamente estas búsquedas de código de operación, además de ser útil para calcular direcciones / compensaciones para etiquetas de salto con nombre, etc.
Los primeros ensambladores fueron escritos a mano. Esos ensambladores podrían usarse para ensamblar ensambladores más complicados, que luego podrían usarse para ensamblar compiladores escritos para lenguajes de nivel superior, y así sucesivamente. Este proceso de escribir iterativamente las herramientas para simplificar la creación del siguiente conjunto de herramientas se denomina arranque (como lo menciona David Rabinowitz en su respuesta) .