Arquitectura Ensamblador !!ARBvp1.0 PARAM arr[5] = {
program.env[0..4] }; #ADDRESS addr; ATTRIB v1 = vertex.attrib[1];
PARAM par1 = program.local[0]; OUTPUT oPos = result.position;
OUTPUT oCol = result.color.front.primary; OUTPUT oTex =
result.texcoord[2]; ARL addr.x, v1.x; MOV res, arr[addr.x – 1];
END Análisis léxico – Sintáctico (Flex
+ Bison) Análisis Semántico (casi completo) (Gp:)
!!ARBvp1.0 (Gp:) AST Tabla símbolos
InsertarST(“arr”,5, ENV_PARAMETER) (Gp:)
Generación Código (Gp:) Específico GPU (Gp:)
Genérico
Line:By0By1By2By3By4By5By6By7By8By9ByAByBByByDByEByF 011: 16 00
03 28 00 01 00 08 26 1b 6a 00 0f 1b 04 78 012: 09 00 03 00 00 00
02 08 24 1b 1b 00 08 1b 14 18 013: 09 00 04 00 00 00 02 08 24 1b
1b 00 04 1b 14 b8 014: 09 00 05 00 00 00 02 08 24 1b 1b 00 02 1b
04 58 015: 09 00 06 00 00 00 02 08 24 1b 1b 00 01 1b 04 f8 016:
16 00 01 00 00 00 02 30 24 1b 1b 00 08 1b 14 98 017: 16 00 02 00
00 01 02 30 24 1b 1b 00 08 1b 04 38 018: 16 00 00 00 00 00 03 30
24 00 1b 00 02 1b 04 d8 019: 16 00 01 00 00 00 03 30 24 00 1b 00
01 1b 14 78 020: 01 00 08 00 00 08 18 08 24 04 ae 00 0c 1b 04 18
021: 17 00 00 00 00 00 13 30 24 00 00 00 08 1b 04 b8 022: 17 00
01 00 00 00 13 30 24 00 00 00 04 1b 14 58 023: 01 00 08 00 00 09
18 08 24 04 04 00 0c 1b 14 f8 024: 01 00 08 00 00 0a 18 08 26 04
ae 00 0c 1b 04 98 025: 01 00 08 00 00 0b 18 08 26 04 04 00 0c 1b
14 38
Ventajas de Ensamblador Proporciona más control sobre el
manejo particular de los requerimientos de hardware Genera
módulos ejecutables más pequeños y
compactos. Normalmente se ejecutan más rápido que
el proceso equivalente codificado en un lenguaje de alto
nivel.
Compilador v/s Ensamblador Un lenguaje de alto nivel utiliza un
compilador para traducir el código fuente a lenguaje de
máquina (código objeto). Un lenguaje de bajo nivel
utiliza un ensamblador para realizar la traducción. Para
ambos niveles, un programa enlazador completa el proceso al
convertir el código objeto en lenguaje de
máquina.
Editor Ensamblador Enlazador prog.asm Crea un programa fuente en
ensamblador (.ASM) Ensamble prog.lstprog.crtprog.map prog.obj
Enlace Ensambla el programa fuente, crea un programa objeto
(.OBJ) Enlaza el programa objeto, crea un programa ejecutable
prog.exe
Existencia de Niveles Nivel n Programa Fuente Traducción
Compilación Interpretación Nivel n-1 Programa
Objeto a) Generación de un programa equivalente en
lenguaje objeto b) Ejecución del nuevo programa
generado
Niveles en Tiempo de Ejecución. Nota: el programa fuente
se ha desvanecido Programas presentes Objeto del usuario El
sistema operativo El micro programa Nivel del SO Maquina
Convencional Microprogramación
Que es un lenguaje ensamblador ? Es aquel en que cada sentencia
produce exactamente una instrucción de máquina.
Correspondencia biunívoca (características que los
distingue de los lenguajes al alto nivel)
Lenguaje ensamblado ADD SUB MUL DIV B) Asigna a las direcciones
nombres simbólicos C) Solo se ejecuta en una familia de
maquinas 24576 57344 28672 29184 Para la PDP_11 Lenguaje de
maquina (octal o hexadecimal)
(Gp:) FORMUL: MOV ADD ADD MOV (Gp:) EAX, 1 EAX, J EAX, K
N, EAX (Gp:) CARGA 1 EN EAX SUMA J A EAX SUMA K A EAX
ALMACENA 1 + J + K EN N (Gp:) 1: DD J: DD K: DD L: DD
(Gp:) 2 3 . 4 0 (Gp:) RESERVA 4 BYTE V INICIAL 2
RESERVA 4 BYTE V INICIAL 3 RESERVA 4 BYTE V INICIAL 4 RESERVA 4
BYTE V INICIAL 0 (Gp:) (Gp:) (a)
(Gp:) (Gp:) FORMUL: MOVE.L ADD.L ADD.L MOVE.L
(Gp:) I,DO J.DO K,DO DO,N (Gp:) CARGA 1 EN DO SUMA
J A DO SUMA K A DO ALMACENA 1 + J + K EN N (Gp:) Formula
de una Instrucción en lenguaje ensamblador (Gp:)
Campo Campo etiqueta operación (Gp:) Campo
operandos (Gp:) Campo de comentarios (Gp:) 1: DC.L
J: ' DC.L K: DC.L L: DC.L (Gp:) 2 3 4 0 (Gp:)
RESERVA 4 BYTE V INICIAL 2 RESERVA 4 BYTE V INICIAL 3 RESERVA 4
BYTE V INICIAL 4 RESERVA 4 BYTE V INICIAL 0
Instrucción en ensamblador (Gp:) a (Gp:) b
(Gp:) c (Gp:) d a- Campo de etiqueta b- Campo de
operación c- Campo de operando d- Campo de comentario
"Dos nombres
simbólicos a las instrucciones". "Abreviatura
simbólica del código de operación".
"Especifica direcciones y registros". "Permite explicar el
funcionamiento del programa". Instrucción en
ensamblador
Lenguaje Ensamblador vs. Lenguaje de Alto Nivel 1)- Arq.
Dependiente Arq. Independiente 2)- Difícil de Mantener
Fácil Mantener 3)- Difícil de Programar
Fácil de Programar 4)- Etiquetas Simbólicas
restringidas en su longitud Sin etiquetas mas próximo al
lenguaje natural
El Proceso de Ensamblaje Ensambladores de 2 pasadas: 1°
Pasada: Construir la tabla de símbolos; que contiene
etiquetas y valores (nombres simbólicos). Ej.: ESPACIO equ
100 Debe identificarse la dirección de la
instrucción para ello se crea el ILC ____* "Contador de
Posiciones de Instrucción" Campo etiqueta SUSANA:
MARÍA: MARISA: CARMEN: (Gp:) Campo (Gp:) Campo
(Gp:) Campo (Gp:) MOV (Gp:) EAX,
(Gp:) EAX-I (Gp:) MOV (Gp:) EBXJ (Gp:) EBX.
J (Gp:) MOV (Gp:) ECX.K (Gp:) ECX« K
(Gp:) IMUL (Gp:) EAX.EAX (Gp:) EAX –
!•! (Gp:) IMUL (Gp:) EBX.EBX (Gp:) EBX
= J"J (Gp:) IMUL (Gp:) ECX.ECX (Gp:) ECX =
K«K (Gp:) ADD (Gp:) EAX, EBX (Gp:)
EAX-I"I + J*J (Gp:) ADD (Gp:) EAX.ECX (Gp:)
EAX .1*1 + JM + (Gp:) MOV (Gp:) N.EAX (Gp:)
N = 1*1 + J*J + K* (Gp:) JMP (Gp:) YA (Gp:)
SALTA A YA (Gp:) operación (Gp:) operandos
(Gp:) comentarlos (Gp:) 5 (Gp:) 100
(Gp:) 6 (Gp:) 106 (Gp:) 6 (Gp:) 111
(Gp:) 2 (Gp:) 117 (Gp:) 3 (Gp:) 11*
(Gp:) 3 (Gp:) 122 (Gp:) 2 (Gp:) 126
(Gp:) 2 (Gp:) 1ZT (Gp:) 5 (Gp:) 129
(Gp:) S (Gp:) 134 (Gp:) Longitud
instrucción (Gp:) ILC ante» sentencia
Fig. 7-3. El contador de posiciones de instrucción (ILC)
va tomando el valor de la dirección donde se
cargará la instrucción en memoria. En este ejemplo,
las sentencias anteriores a SUSANA ocupan 100 bytes.
(Gp:) = (Gp:) Símbolo Valor Otra
información (Gp:) : (Gp:) SUSANA :.
(Gp:) 100 (Gp:) (Gp:) MARÍA
(Gp:) 111 (Gp:) (Gp:) MARISA (Gp:)
125 (Gp:) (Gp:) CARMEN (Gp:) 129
(Gp:) (Gp:) h (Gp:) L «
(Gp:) h Fig. 7-4. Tabla de simbolos para el programa de la
figura 7-3. Código de Código de Primer Segundo
operación Longitud de Clase deoperación operando
operando hexadecimal la instrucción instrucción
(Gp:) (Gp:) '- Fig. 1 (Gp:)
AAA (Gp:) – (Gp:) – (Gp:) 37 (Gp:) 1
(Gp:) e (Gp:) ADD (Gp:) EAX (Gp:)
IMMED32 (Gp:) 05 (Gp:) 5 (Gp:) 4
(Gp:) ADD (Gp:) REG (Gp:) REG (Gp:) 01
(Gp:) 2 (Gp:) 19 (Gp:) AND (Gp:) EAX
(Gp:) IMMED32 (Gp:) 25 (Gp:) 5 (Gp:)
4 (Gp:) AND (Gp:) REG (Gp:) REG (Gp:)
21 (Gp:) 2 (Gp:) 19 (Gp:) = (Gp:) =L
=J (Gp:) – (Gp:) = (Gp:) s – (Gp:)
-5. Extractos de una tabla de códigos de operación
en un ensamblador 80386.
2° Pasada: Es generar el programa objeto y de ser posible
imprimir el listado del ensamblaje. Algunos errores comunes (pag
460)
Tabla de Símbolos: Lento, fácil de -programar
Organización: a) Vector de pares (*) Valor b) Ordenar
tabla de N elementos y usar algoritmo de búsqueda binaria
intentos c) Codificación por transformación: Uso de
una función de transformación que haga corresponder
a cada símbolo un numero entre O y k-1 (*) Memoria
Asociativa Símbolos Búsqueda lineal,
secuencial
MACROS: Agrupar instrucciones y llamarlas c/vez que se necesite.
Es necesario una instrucción de llamada a otra de
retorno.(ej. de 2 Inst.) Las macros proporcionan una
solución sencilla y eficiente al problema que plantean las
secuencias idénticas o casi idénticas de
instrucciones que se usan repetidamente en un programa.
MACROS: * Definición: Asignar un nombre a una
porción de texto. MOV EAX.P MOV EBX.Q MOV O.EAX MOV P.EBX
MOV EAX.P MOV EBX.Q MOV Q.EAX MOV P.EBX SWAP MACRO MOVEAX.P MOV
EBX.Q MOV Q,EAX MOV P.EBX ENDM SWAP SWAP 1. Encabezado de Macro
—— nombre. 2. Texto que forma el cuerpo de la Macro.
3. Una instrucción de fin de Macro.
*) Llamado: El uso del nombre de una macro como código de
operación. *) Expansión: El reemplazo por el cuerpo
de la Macro; este se traduce en el proceso de ensamblaje, no en
el de ejecución. NOTA; Ante la presencia de un programa en
lenguaje de máquina es imposible decir si se han utilizado
Macros en su generación.
MACROS Vs. PROCEDIMIENTOS Llamada a procedimiento ítem
Llamada a macro (Gp:) Momento en al que (e hice (Gp:)
Durante al ensamblaje (Gp:) Duren» le
ejecución del programa objeto (Gp:) El cuerpo se
inserta en el programa objeto en todos los sitios donde aparece
el nombre (Gp:) Sí (Gp:) No (Gp:) Es
una instrucción de llamada a procedimiento insertada en el
programa objeto (Gp:) No (Gp:) Si (Gp:) Debe
usarse una Instrucción retomo para devolver el control a
la sentencia que sigue a la llamada (Gp:) No (Gp:)
Si (Gp:) Numero de copia» del cuerpo que aparecen en
el programa objeto (Gp:) Una por cada llamada a la macro
(Gp:) 1 Fl». 7-10. Comparación entre
llamada* a macro y a procedimiento
Macros con Parámetros: – Parámetros formales. –
Parámetros reales. MOV EAX.P MOV EBX.Q MOV Q.EAX MOV P.EBX
MOV EAX.R MOV EBX.S MOV S.EAX MOV R.EBX P1,P2 EAX.P1 EBX.P2
P2.EAX P1.EBX MOV MOV MOV MOV CHANCE P, Q CHANCE R, S Ftg. 7-11.
Secuencias casi idénticas de instrucciones, (a) Sin macro.
(b) Con una macro. CHANCE MACRO (a) (b)
(Gp:) A B C D E F
(Gp:) Estructura de un módulo objeto (Gp:)
(Gp:) A- Nombre, longitud, fecha B- Lista de
símbolos definidos en el módulo a los que otros
módulos pueden hacer referencia (junto con su
dirección) para identificarlos el programador usa una
pseudo instrucciones de pto. de entrada o símbolo externos
— »• tabla de pto. de entrada. C- Lista de los
símbolos que usa, pero que está definido en otros
módulos, junto con otra que dice que instrucciones usa c/u
de esos símbolos —— >• tabla de
referencia externa. (Gp:) Identificación
(Gp:) Tabla de Ptos de entrada (Gp:) Tabla de referencias
externas (Gp:) Instrucciones de maquinarias y constantes
(Gp:) Lista de rehubicación (Gp:) Fin del
Módulo (Gp:)
Enlace dinámico "Enlazar procedimientos compilados por
separado en el momento en el que se llama por primera vez"
. 7-17. Enlace dinámico, (a) Antes de llamar a TIERRA. (b)
Después de llamar i TIERRA-