El lenguaje ensamblador o assembler (en inglés: assembler language y la abreviación asm) es un lenguaje de programación que se usa en los microprocesadores. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura de procesador y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador.
Cada arquitectura de procesador tiene su propio lenguaje ensamblador que usualmente es definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portables.
El opcode y su relación con el lenguaje ensamblador
El lenguaje ensamblador es una representación más legible para los humanos del lenguaje máquina. En vez de usar directamente números binarios (como los opcodes), se usan mnemónicos fáciles de entender. Por ejemplo:
-
En lugar de un opcode binario como
101010, en ensamblador podrías ver algo comoADDpara representar una operación de suma. - En esencia, los mnemónicos del ensamblador son una traducción de los opcodes a un formato más accesible.
Cuando un programador escribe un programa en lenguaje ensamblador, el ensamblador lo traduce a opcodes que el procesador puede interpretar.
Los opcodes binarios, los mnemónicos del código ensamblador y el
codificado en UTF-8.
Aquí tienes un ejemplo avanzado que conecta los opcodes binarios, los mnemónicos del código ensamblador y el codificado en UTF-8. Lo estructuraremos paso a paso:
Contexto del ejemplo
Imagina que queremos trabajar con un carácter en UTF-8, como la letra
A. En UTF-8, el carácter A está representado por
el código hexadecimal 41 (que corresponde al binario
01000001). El procesador necesita trabajar con ese dato,
realizando operaciones como cargarlo en un registro, sumarle valores, o
compararlo.
Código ensamblador y opcodes
Aquí está una secuencia de instrucciones en ensamblador para manipular el
carácter A:
-
Cargar el carácter en un registro: Mnemónico:
MOV AL, 41hOpcode binario:1010 1001Explicación: La instrucción mueve el valor41h(el código deAen UTF-8) al registroAL(parte baja del registro acumulador). -
Sumar un valor al carácter (por ejemplo, convertirlo en otro
carácter):
Mnemónico:
ADD AL, 01hOpcode binario:0000 1100Explicación: La instrucción suma01hal contenido del registroAL, lo que en este caso cambiaría el código UTF-8 deA(41h) aB(42h). -
Comparar el carácter con otro valor: Mnemónico:
CMP AL, 42hOpcode binario:0011 1010Explicación: La instrucción compara el contenido del registroALcon42h, verificando si coincide con el carácterB.
Relación con UTF-8
En UTF-8:
- Cada carácter está codificado como una secuencia de uno o más bytes.
- Los opcodes mencionados son las instrucciones que manipulan los datos binarios, procesando los valores codificados según UTF-8.
Por ejemplo, el valor 41h para la letra A fue
interpretado y procesado en el ejemplo como datos en lenguaje máquina, donde
los opcodes (como MOV, ADD y CMP)
realizan operaciones directamente en el código binario.
Lenguaje ensamblador (x86 y x64) y UTF-8
1. Lenguaje ensamblador para x86 y x64
El ensamblador en x86 y x64 es la forma más cercana al lenguaje máquina. Los mnemónicos son instrucciones traducidas en opcodes binarios procesados por el CPU.
Código x86
MOV EAX, 41h ; Cargar el valor 41h (UTF-8 para 'A') en el registro EAX
ADD EAX, 02h ; Sumar 2 al registro EAX
CMP EAX, 43h ; Comparar el contenido con 43h (UTF-8 para 'C')
Código x64
MOV RAX, 41h ; Cargar el valor 41h en el registro RAX
ADD RAX, 03h ; Sumar 3 al registro RAX
CMP RAX, 44h ; Comparar el contenido con 44h (UTF-8 para 'D')
2. Relación con UTF-8
El codificado UTF-8 es un estándar para representar caracteres en formato binario. Por ejemplo:
- Letra A:
41hen hexadecimal o01000001en binario. - Carácter ¡:
C2 A1en hexadecimal.
Manipulación en ensamblador
; Cargar el primer byte de '¡' (C2h)
MOV AL, C2h
; Cargar el segundo byte de '¡' (A1h)
MOV BL, A1h
; Combinar los bytes para procesar el carácter completo
OR AL, BL
3. Opcodes aceptados internacionalmente
Los opcodes son específicos para cada arquitectura:
- MOV: Transferencia de datos.
- x86:
1011 xxxx(depende del registro). - x64: Similar, extendido para registros de 64 bits.
- x86:
- ADD: Suma de valores.
- x86:
0000 1100. - x64: Similar pero adaptado a registros más grandes.
- x86:
Resumen
Los opcodes (como 1010 1001 o 0000 1100)
representan las acciones específicas que el procesador ejecuta, mientras que
los mnemónicos (como MOV, ADD, CMP)
son una representación legible para los humanos. Y el codificado UTF-8
proporciona los valores binarios que se procesan con estas
instrucciones.
![]() |
| Motorola MC6800 Assembler listing - Lenguaje ensamblador |
Leer más sobre lenguaje ensamblador, visitar la wiki:
https://es.wikipedia.org/wiki/Lenguaje_ensamblador
----

