Assembler es un programa para convertir instrucciones escritas en código ensamblador de bajo nivel en código de máquina reubicable y generar información para el cargador.
Genera instrucciones evaluando los mnemotécnicos (símbolos) en el campo de operación y encuentra el valor del símbolo y los literales para producir código de máquina. Ahora, si el ensamblador hace todo este trabajo en un solo escaneo, entonces se llama ensamblador de un solo paso; de lo contrario, si lo hace en múltiples escaneos, se llama ensamblador de múltiples pasos. Aquí el ensamblador divide estas tareas en dos pasos:
- Pase-1:
- Defina símbolos y literales y recuérdelos en la tabla de símbolos y la tabla de literales respectivamente.
- Realizar un seguimiento del contador de ubicación
- Procesar pseudooperaciones
- Pase-2:
- Genere código de objeto convirtiendo el código de operación simbólico en el código de operación numérico respectivo
- Genere datos para literales y busque valores de símbolos.
En primer lugar, tomaremos un pequeño programa en lenguaje ensamblador para entender el funcionamiento en sus respectivos pases. Formato de declaración en lenguaje ensamblador:
[Label] [Opcode] [operand] Example: M ADD R1, ='3' where, M - Label; ADD - symbolic opcode; R1 - symbolic register operand; (='3') - Literal Assembly Program: Label Op-code operand LC value(Location counter) JOHN START 200 MOVER R1, ='3' 200 MOVEM R1, X 201 L1 MOVER R2, ='2' 202 LTORG 203 X DS 1 204 END 205
Echemos un vistazo a cómo funciona este programa:
- INICIO: esta instrucción inicia la ejecución del programa desde la ubicación 200 y la etiqueta INICIO proporciona el nombre del programa. (JOHN es el nombre del programa)
- MOVER: Mueve el contenido del literal (= ‘3’) al operando de registro R1.
- MOVEM: Mueve el contenido del registro al operando de memoria (X).
- MOVER: nuevamente mueve el contenido del literal (= ‘2’) al operando de registro R2 y su etiqueta se especifica como L1.
- LTORG: Asigna dirección a los literales (valor LC actual).
- DS(Data Space): Asigna un espacio de datos de 1 al Símbolo X.
- END: Finaliza la ejecución del programa.
Funcionamiento de Pass-1: Definir Símbolo y tabla literal con sus direcciones.
Nota: La dirección literal se especifica mediante LTORG o END.
Paso 1: INICIO 200 (aquí no se encuentra ningún símbolo o literal, por lo que ambas tablas estarían vacías)
Paso 2: MOVER R1, =’3′ 200 (=’3′ es un literal, por lo que se crea una tabla literal)
Literal | Dirección |
---|---|
=’3′ | – – – |
Paso 3: MOVEM R1, X 201
X es un símbolo al que se hace referencia antes de su declaración, por lo que se almacena en la tabla de símbolos con el campo de dirección en blanco.
Símbolo | Dirección |
---|---|
X | – – – |
Paso 4: L1 MOVER R2, =’2′ 202
L1 es una etiqueta y =’2′ es un literal, así que guárdelos en las tablas respectivas
Símbolo | Dirección |
---|---|
X | – – – |
L1 | 202 |
Literal | Dirección |
---|---|
=’3′ | – – – |
=’2′ | – – – |
Paso 5: LTORG 203
Asigne la dirección al primer literal especificado por el valor LC, es decir, 203
Literal | Dirección |
---|---|
=’3′ | 203 |
=’2′ | – – – |
Paso 6: X DS 1 204
Es una declaración de declaración de datos, es decir, a X se le asigna un espacio de datos de 1. Pero X es un símbolo al que se hizo referencia anteriormente en el paso 3 y se definió en el paso 6. Esta condición se denomina Problema de referencia directa donde la variable es referido previo a su declaración y puede ser resuelto por back-patching. Entonces ahora el ensamblador asignará a X la dirección especificada por el valor LC del paso actual.
Símbolo | Dirección |
---|---|
X | 204 |
L1 | 202 |
Paso 7: END 205
El programa finaliza la ejecución y el literal restante obtendrá la dirección especificada por el valor LC de la instrucción END. Aquí está la tabla completa de símbolos y literales hecha por el paso 1 del ensamblador.
Símbolo | Dirección |
---|---|
X | 204 |
L1 | 202 |
Literal | Dirección |
---|---|
=’3′ | 203 |
=’2′ | 205 |
Ahora las tablas generadas por el paso 1 junto con su valor LC irán al paso 2 del ensamblador para el procesamiento posterior de los pseudocódigos de operación y los códigos de operación de la máquina.
Funcionamiento de Pass-2:
Pass-2 del ensamblador genera código de máquina al convertir códigos de operación de máquina simbólicos en su configuración de bits respectiva (forma comprensible para la máquina). Almacena todos los códigos de operación de la máquina en la tabla MOT (tabla de códigos de operación) con código simbólico, su longitud y su configuración de bits. También procesará pseudo-operaciones y las almacenará en la tabla POT (tabla de pseudo-operaciones).
Varias bases de datos requeridas por pass-2:
1. MOT table(machine opcode table) 2. POT table(pseudo opcode table) 3. Base table(storing value of base register) 4. LC ( location counter)
Echa un vistazo al diagrama de flujo para entender:
Como un ensamblador completo funciona como:
Publicación traducida automáticamente
Artículo escrito por SaiyamJain y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA