El lenguaje ensamblador es una abstracción deliberada, diseñada, de código de máquina. No hay ningún requisito para tener una relación específica entre el código de máquina y el ensamblador.
Además, la codificación de diferentes grupos de instrucciones de la máquina está destinada a ayudar a la implementación del hardware. En procesadores más recientes (por ejemplo, a partir de la década de 1980), las instrucciones de la máquina se pueden expresar en un ensamblador de maneras muy diferentes a las instrucciones subyacentes. Por ejemplo, el registro de movimiento de MIPS para registrar se puede expresar en código de máquina como "Agregar RS a 0 poniendo el resultado en RD". En este caso, puede que no haya ninguna instrucción de movimiento en el código de máquina del procesador, la instrucción del ensamblador es solo una conveniencia para ayudar al programador del ensamblador (o al escritor del compilador que trata de entender cómo dirigir ese conjunto de instrucciones).
Por lo tanto, la razón de ser del ensamblador podría ser que se lea de manera coherente; quizás el ensamblador refleje idiomas de nivel superior, por ejemplo,
RD = RS op RT.
En MIPS, las instrucciones de la máquina están codificadas para intentar asegurar que un parámetro de instrucción específico, digamos el destino de la operación, RD, esté siempre en la misma posición de bit dentro de la instrucción. Puede haber otros campos que necesiten usar los mismos bits que otros parámetros, por ejemplo, la instrucción de máquina para una rama podría reinterpretar los bits utilizados en otras instrucciones para un registro de origen, como el desplazamiento de la rama.
Por lo tanto, los diseñadores de conjuntos de instrucciones eligen las posiciones de bit para el código de instrucción y los parámetros para hacer que su hardware sea más simple, más barato o más rápido.
El diseñador del lenguaje del ensamblador puede usar diferentes restricciones, generalmente para ayudar al programador a escribir código, o para hacer que el ensamblador sea más simple, barato o rápido.
La abstracción entre los dos puede ser muy útil; Reflejar la diferente codificación de instrucciones de la máquina (es decir, la posición de los bits para los parámetros) puede hacer que el lenguaje ensamblador sea más difícil de aprender o usar de manera confiable.