PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2...

50
1 Universidad de Guadalajara Centro universitario de los Altos Ingeniería en Computación Seminario de traductores de lenguaje I PRÁCTICA #1 Identificación de las partes de una línea de lenguaje ensamblador. Implementar el algoritmo para separar las partes de una línea de lenguaje ensamblador. Descripción de la práctica: 1. Capturar el siguiente ejemplo con un editor de texto puro: ;comentario número 1 =SEMINARIO= ORG %00001111 Et1 equ $ffFF dos LDAA @4732 SWI DS.b %0011000011111100 ;comentario número 2 ¡Traductores! ;comentario número 3 tres sWi End 2. Al capturar el ejemplo, utilizar espacios en blanco y tabuladores de manera alternada para crear varias opciones de separación de palabras. 3. Grabar el archivo con el siguiente nombre P1ASM.txt 4. Cada una de las líneas capturadas es un ejemplo ficticio de un código en lenguaje ensamblador para la arquitectura HC12. Cada una de estas líneas puede ser de dos formas: a. Línea de comentario. b. Línea de etiqueta, código de operación (CODOP) y operando. 5. Las líneas de comentario tienen las siguientes reglas de escritura. a. Comienzan con el carácter de “;” b. Este carácter de “;” solo puede estar en la primera posición de la línea. c. Después del carácter de “;” pueden seguirle cualquier carácter. d. La longitud máxima es de 80 caracteres. e. El delimitador de la línea de comentario es el retorno de carro. 6. Las líneas que están formadas por etiqueta, CODOP y operando tienen las siguientes reglas de escritura: a. ETIQUETAS: i. Comienzan con letra mayúscula o minúscula (son válidos los dos casos). ii. Esta primera letra debe de estar sólo en la primera posición de la línea. iii. Su longitud es de 8 caracteres máximo. iv. Después de la primera letra le pueden seguir más letras, números o guiones bajos. v. Cualquier otro carácter representado es un error. b. CODOPS: i. Comienzan con letra mayúscula o minúscula. ii. El otro carácter válido es el “.” Y sólo puede haber uno sólo en la palabra. iii. Su longitud máxima es de 5 caracteres. iv. Cualquier otro carácter es un error. c. OPERANDOS: i. Pueden comenzar con cualquier carácter (en prácticas posteriores se revisarán las excepciones). ii. Pueden tener cualquier longitud. 7. Este tipo de líneas pueden tener las siguientes combinaciones:

Transcript of PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2...

Page 1: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

1

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #1

Identificación de las partes de una línea de lenguaje ensamblador. Implementar el algoritmo para separar las partes de una línea de lenguaje ensamblador. Descripción de la práctica:

1. Capturar el siguiente ejemplo con un editor de texto puro:

;comentario número 1 =SEMINARIO=

ORG %00001111

Et1 equ $ffFF

dos LDAA @4732

SWI

DS.b %0011000011111100

;comentario número 2 ¡Traductores!

;comentario número 3

tres sWi

End

2. Al capturar el ejemplo, utilizar espacios en blanco y tabuladores de manera alternada para crear varias opciones de

separación de palabras. 3. Grabar el archivo con el siguiente nombre P1ASM.txt 4. Cada una de las líneas capturadas es un ejemplo ficticio de un código en lenguaje ensamblador para la arquitectura

HC12. Cada una de estas líneas puede ser de dos formas: a. Línea de comentario. b. Línea de etiqueta, código de operación (CODOP) y operando.

5. Las líneas de comentario tienen las siguientes reglas de escritura. a. Comienzan con el carácter de “;” b. Este carácter de “;” solo puede estar en la primera posición de la línea. c. Después del carácter de “;” pueden seguirle cualquier carácter. d. La longitud máxima es de 80 caracteres. e. El delimitador de la línea de comentario es el retorno de carro.

6. Las líneas que están formadas por etiqueta, CODOP y operando tienen las siguientes reglas de escritura: a. ETIQUETAS:

i. Comienzan con letra mayúscula o minúscula (son válidos los dos casos). ii. Esta primera letra debe de estar sólo en la primera posición de la línea.

iii. Su longitud es de 8 caracteres máximo. iv. Después de la primera letra le pueden seguir más letras, números o guiones bajos. v. Cualquier otro carácter representado es un error.

b. CODOPS: i. Comienzan con letra mayúscula o minúscula.

ii. El otro carácter válido es el “.” Y sólo puede haber uno sólo en la palabra. iii. Su longitud máxima es de 5 caracteres. iv. Cualquier otro carácter es un error.

c. OPERANDOS: i. Pueden comenzar con cualquier carácter (en prácticas posteriores se revisarán las excepciones).

ii. Pueden tener cualquier longitud. 7. Este tipo de líneas pueden tener las siguientes combinaciones:

Page 2: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

2

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

a. ETIQUETA, CODOP, OPERANDO b. ETIQUETA, CODOP c. CODOP, OPERANDO d. CODOP

8. Para el primer caso, se debe considerar: a. Si la línea comienza con ETIQUETA, el primer carácter de la línea debe ser entonces una letra. b. Entre ETIQUETA y CODOP solo se puede tener separadas estas dos palabras por espacios en blanco o

tabuladores. c. Entre CODOP y OPERANDO solo se puede tener separadas estas dos palabras por espacios en blanco o

tabuladores. d. Después de la palabra OPERANDO solo se puede tener el retorno de carro, éste siempre será el

delimitador de cada sentencia de lenguaje ensamblador. 9. Para el segundo caso, se debe considerar:

a. Si la línea comienza con ETIQUETA, el primer carácter de la línea debe de ser entonces una letra. b. Entre ETIQUETA y CODOP solo se puede tener separadas estas dos palabras por espacios en blanco o

tabuladores. c. Después de la palabra CODOP solo se puede tener el retorno de carro, éste siempre será el delimitador de

cada sentencia de lenguaje ensamblador. 10. Para el tercer caso, se debe considerar:

a. Antes de la palabra CODOP solo se puede tener espacios en blanco o tabuladores. Es decir, el primer carácter de la línea será un espacio en blanco o un tabulador.

b. Entre las palabras CODOP y OPERANDO solo se puede tener espacios en blanco o tabuladores. c. Después de la palabra OPERANDO solo se puede tener el retorno de carro, éste siempre será el

delimitador de cada sentencia de lenguaje ensamblador. 11. Para el cuarto caso, se debe considerar:

a. Antes de la palabra CODOP solo se puede tener espacios en blanco o tabuladores. Es decir, el primer carácter de la línea será un espacio en blanco o un tabulador.

b. Después de la palabra CODOP solo se puede tener el retorno de carro, éste siempre será el delimitador de cada sentencia de lenguaje ensamblador.

12. Se debe de observar que siempre debe de haber por lo menos la palabra que conforme el CODOP ya que de otra forma sería un error.

13. La última línea del ejemplo siempre debe tener la palabra END. Es decir, al validar la línea que tiene la palabra END se debe considerar que este es el final del archivo con el ejemplo de lenguaje ensamblador.

Para hacer el programa:

1. Hacer un programa que abra el archivo creado previamente (P1ASM.txt) 2. Leer línea por línea el archivo de ejemplo, pudiendo:

a. Leer cada línea directamente del archivo, de una por una y procesar cada línea que se va leyendo; o bien, b. Leer todo el archivo con un ciclo y conforme se lee el archivo, almacenarlo en una estructura de datos

temporal, posteriormente leer de la estructura de datos. 3. Una vez identificada la primera línea, se debe de comenzar a leer carácter por carácter para identificar las palabras

e ignorar los espacios en blanco y tabuladores. 4. Una vez que se identifique la primera palabra de una línea se debe de determinar si ésta fue ETIQUETA, CODOP u

OPERANDO 5. Se deben utilizar tres variables que se deben de llamar “etiqueta”, “codop” y “operando” que deben ser de tipo

cadena. Una vez que se identifican las palabras de una línea, se debe de imprimir en pantalla el valor de cada variable.

6. Si alguna variable no tuviera ningún valor, se debe asignar un valor “null”.

Page 3: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

3

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

7. Una vez impreso el valor de las variables en el monitor, se debe de inicializar las variables con el carácter nulo, para que no se almacene basura en las variables. Una vez impreso el valor de las palabras identificadas por una línea debes de leer la siguiente línea del archivo y hacer el mismo procedimiento.

8. Para el caso de las líneas de comentario, solo se debe de imprimir en pantalla el mensaje de “comentario”. Ejemplo de salida al monitor para el archivo P1ASM.txt COMENTARIO ETIQUETA= null CODOP= ORG OPERANDO= %00001111 ETIQUETA= Et1 CODOP= equ OPERANDO= $ffFF ETIQUETA= dos CODOP= LDAA OPERANDO= @4732 ETIQUETA= null CODOP= SWI OPERANDO= null ETIQUETA= null CODOP= DS.b OPERANDO= %0011000011111100 COMENTARIO COMENTARIO ETIQUETA= tres CODOP= sWi OPERANDO= null ETIQUETA=null CODOP=End OPERANDO=null

Page 4: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

1

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #2

Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar el programa anterior para que se identifique por cada instrucción de cada línea del lenguaje ensamblador, el o los modos de direccionamiento que le correspondan. Descripción de la práctica:

1. Capturar en el bloc de notas el siguiente ejemplo con el nombre P2ASM.txt ORG $AB ET1 SWI ADCA 1,X BRA ET1 END

2. Capturar el siguiente ejemplo con un editor de texto puro, el conjunto de instrucciones con el nombre TABOP.txt

Instrucción (CODOP)

Operando (Sí, No)

Modo direccionamiento

Código máquina (hex)

Total de bytes calculados

Total de bytes por calcular

Suma total de bytes

ADCA SI Inm Dir Ext Idx Idx1 …

(anotar los dígitos hexadecimales, no anotar lo que está en mayúsculas.

(anotar el número que se corresponda por los bytes que están representados en hex)

(anotar el número que se corresponda por los pares representados en letras minúsculas)

(anotar el número que se corresponda de sumar los valores numéricos de las dos columnas anteriores)

BRA SI REL

SWI NO INH

3. Modificar el programa para que una vez que identifique las palabras por línea (ETIQUETA, CODOP, OPERANDO) se compare contra el TABOP.txt

a. Buscar el valor de la variable CODOP contra el TABOP.txt b. Si se encuentra:

i. Verificar si este CODOP debe o no debe de tener operando. Si no cumple con este requisito, indicar ERROR.

ii. Identificar el modo o modos de direccionamiento, el código calculado, la cantidad de bytes por calcular y el total de bytes que le corresponden a este CODOP.

iii. Imprimir en pantalla toda la información que le corresponde a este CODOP. c. Si no se encuentra, indicar ERROR.

Page 5: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #3

Identificar el tamaño de la instrucción en bytes de acuerdo al modo de direccionamiento (analizar operando), considerando las diversas bases numéricas y las características propias de cada modo de direccionamiento. Validar el CODOP y el OPERANDO, imprimir en pantalla los resultados como se muestran en el cuadro siguiente y además se deben validar TODOS los posibles errores en los OPERANDOS atendiendo a las reglas de escritura para cada uno de ellos de acuerdo a su particular MODO de DIRECCIONAMIENTO. En caso de no cumplir con las reglas de escritura, mostrar en pantalla el error específico.

ETIQUETA CODOP OPERANDO LO QUE DEBE APARECER EN PANTALLA

ORG 1 Error

SWI Inherente 1 byte

ADCA 3 Directo 2 bytes

ADCA @3 Directo 2 bytes

ADCA %111 Directo 2 bytes

ADCA $3 Directo 2 bytes

ADCA 300 Extendido 3 bytes

ADCA $FFF Extendido 3 bytes

ADCA #3 Inmediato 2 bytes

ADCA #@3 Inmediato 2 bytes

ADCA #%1111 Inmediato 2 bytes

ADCA 1,X Indizado de 5 bits, (IDX), 2 bytes

ADCA 255,X Indizado de 9 bits, (IDX1), 3 bytes

ADCA 32768,X Indizado de 16 bits, (IDX2), 4 bytes

ADCA 1,+PC Indizado de pre incremento, (IDX), 2 bytes

ADCA A,X Indizado de acumulador, (IDX), 2 bytes

ADCA 254,X Indizado de 9 bits, (IDX1), 3 bytes

ADCA 64444,X Indizado de 16 bits, ([IDX2]), 4 bytes

ADCA [1,X] Indizado Indirecto de 16 bits, ([IDX2]), 4 bytes

ADCA [6444,X] Indizado Indirecto de 16 bits, ([IDX2]), 4 bytes

ADCA [D,X] Indizado indirecto de Acumulador “D”, ([D,IDX]), 2 bytes

BRA UNO Relativos de 8 bits, 2 bytes

LBRA UNO Relativo de 16 bits, 4 bytes

END

DESCRIPCIÓN EJEMPLO

Modo Inherente: No tiene operando. ORG $FFF NOP INX END

Modo Inmediato: Utiliza las cuatro bases numéricas en su operando, inicia el operando con el símbolo de #, pueden ser de 8 o 16 bits de acuerdo a lo que indique el TABOP, por lo tanto el operando debe de tener un valor entre 0 a 255 para ser de 8 bits, y de 256 a 65535 para ser de 16 bits, los valores numéricos pueden utilizar ceros a la izquierda.

ORG $FFF LDAA #55 LDX #$0234 LDY #$67 LDAA #%11 LDY #@234

Page 6: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

END

Modo directo: Utiliza las cuatro bases numéricas en su operando, los valores numéricos pueden representarse con ceros a la izquierda, el operando se puede representar con valores entre 0 a 255.

ORG $FFF LDAA $55 LDAA $0055 LDX $20 END

Modo extendido: Utiliza las cuatro bases numéricas en sus operandos, los valores numéricos pueden representarse con ceros a la izquierda, el operando se puede representar con valores entre 256 a 65535, y también el operando puede estar representado por una palabra que cubra las reglas de escritura de las etiquetas.

ORG $FFF LDAA 300 LDAA $FFFF LDX VALOR1 END

Modo indizado de 5 bits: En el TABOP se representa con la abreviación IDX, en el operando se representan valores numéricos, únicamente en base decimal, con un rango de -16 a 15, después del valor debe de haber siempre el carácter de “,” (coma) y después el nombre de un registro de computadora válido, como son X, Y, SP y PC (cualquier nombre de registro diferente es un error). Los nombres de los registros se pueden representar indistintamente en mayúsculas o minúsculas. Existe una excepción y es cuando el operando inicia con el carácter de “,” después de la coma debe de representarse cualquier nombre de registro de computadora como los mencionados. Si el operando estuviera representado por “X” entonces se debe de interpretar como si fuera “0,X”.

ORG $0 LDAA ,X LDAA 0,X LDAA 1,SP LDAA 15,X LDAA -1,Pc LDAA -16,x STAB -8,y END

Modo indizado de 9 bits: En el TABOP se representa con la abreviación IDX1, en el operando se representan valores numéricos, únicamente en base decimal, con un rango de -256 a -17 y de 16 a 255, después del valor debe de haber siempre el carácter de “,” (coma) y después el nombre de un registro de computadora válido, como son X, Y, SP y PC (cualquier nombre de registro diferente es un error). Los nombres de los registros se pueden representar indistintamente en mayúsculas o minúsculas.

ORG $0 LDAA 255,X LDAA 34,SP LDAA -18,pc LDAA -256,x LDAA -20,y END

Modo indizado de 16 bits: En el TABOP se representa con la abreviación IDX2, en el operando se representan valores numéricos, únicamente en base decimal, con un rango de 256 a 65535, después del valor debe de haber siempre el carácter de “,” (coma) y después el nombre de un registro de computadora válido, como son X, Y, SP y PC (cualquier nombre de registro diferente es un error). Los nombres de los registros se pueden representar indistintamente en mayúsculas o minúsculas.

ORG $0 LDAA 31483,X END

Modo indizado indirecto de 16 bits: En el TABOP se representa con la abreviación [IDX2], en el operando se representan valores numéricos, únicamente en base decimal, con un rango de 0 a 65535, después del valor debe de haber siempre el carácter de “,” (coma) y después el nombre de un registro de computadora válido, como son X, Y, SP y PC (cualquier nombre de registro diferente es un error). Los nombres de los registros se pueden representar indistintamente en mayúsculas o minúsculas. Y siempre deben de existir los dos corchetes.

ORG $0 LDAA [10,X] LDAA [31483,X] END

Modo indizado de auto pre/post decremento/incremento: En el TABOP se representa con la abreviación IDX, en el operando se representan valores numéricos, únicamente en base decimal, con un rango de 1 a 8, después del valor debe de haber siempre el carácter de “,” (coma) y después un signo positivo o negativo y enseguida el nombre de un registro de computadora válido, como son X, Y, SP. O bien después de la coma puede haber el nombre de un registro X, Y, SP y enseguida un signo positivo o negativo, tal y como se muestra en el ejemplo. Cualquier nombre de registro diferente es un error. Los nombres de los registros se pueden representar indistintamente en mayúsculas o minúsculas.

ORG $0 STAA 1,-SP STAA 1,SP- STX 2,SP+ STX 2,+SP END

Page 7: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Modo indizado de acumulador: En el TABOP se representa con la abreviación IDX, en el operando se representan únicamente nombre de registros de computadora, pero en un orden particular. Los primeros registros que se pueden representar antes del carácter de la coma son A, B y D. Después de la coma se puede representar únicamente los registros X, Y, SP o PC. Los nombres de los registros se pueden representar indistintamente en mayúsculas o minúsculas.

ORG $0 LDAA B,X LDAA a,X LDAA D,x STX b,PC STX d,Y END

Modo indizado de acumulador indirecto: En el TABOP se representa con la abreviación [D,IDX], en el operando se representan únicamente nombre de registros de computadora, pero en un orden particular. El único registro que se pueden representar antes del carácter de la coma es D. Después de la coma se puede representar únicamente los registros X, Y, SP o PC. Los nombres de los registros se pueden representar indistintamente en mayúsculas o minúsculas.

ORG $0 JMP [D,PC] ADCA [d,X] ADCB [D,Sp] ADDA [D,y] END

Modo relativos de 8 y 16 bits: En el TABOP se representa con la abreviación REL. El operando no puede tener valores numéricos. El operando debe ser una palabra que cumpla con las reglas de escritura de las etiquetas. El TABOP determina si la instrucción es de 8 o 16 bits dependiendo de la cantidad de bytes que le correspondan.

ORG $0 BRA UNO_1 LBRA DOS_2 BRA Tres LBRA Et_c4 END

Las bases numéricas son cuatro: decimal, hexadecimal, octal y binaria. Cada una de ellas tiene sus reglas de escritura a seguir, deberás de evaluar las cuatro bases numéricas e imprimir en pantalla cada error relacionado al manejo inadecuado de las bases numéricas.

Hexadecimal, se representa con el carácter de pesos ($) y le pueden seguir las letras, minúsculas y/o mayúsculas, A a F y los dígitos 0 al 9.

Octal, se representa con el carácter de @ y le pueden seguir los dígitos del 0 al 7.

Binario, se representa con el carácter de % y le pueden seguir los dígitos 0 y 1.

Decimal, inicia con cualquiera de los dígitos de 0 al 9.

Page 8: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

1

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #4

Uso del contador de localidades y su relación con las instrucciones y DIRECTIVAS del lenguaje ensamblador; así como la utilización de ARCHIVOS AUXILIARES (temporal o de listado y tabla de símbolos). Completar el programa de la práctica tres para incorporar la validación de las directivas; la generación del contador de localidades y la generación de archivos auxiliares. Dirección inicial y contador de localidades

Solo puede existir un solo “ORG”

La dirección inicial es el valor que está asociado a la palabra ORG. El valor puede estar representado en cualquier base numérica.

La dirección inicial se abrevia como DIR_INIC, y es una variable de tipo entero, que puede tomar valores de 0 al 65535. El valor de la dirección inicial se sitúa en la posición del operando.

El primer valor del contador de localidades es el valor de la dirección inicial. El contador de localidades se abrevia con las siglas CONTLOC, se debe manejar como una variable de tipo entero. Toma valores en cualquier base numéricas. Su rango es de 0 65535. El valor del contador de localidades se incrementa:

o Con la cantidad de bytes de cada instrucción y/o o Con la cantidad de bytes de las directivas.

El valor que va obteniendo el contador de localidades se asocia a las etiquetas (cuando existen).

Los valores de la dirección inicial y del contador de localidades se representan en los archivos temporal y tabla de símbolos.

En el siguiente ejemplo de DIR_INIC=4095 y el primer valor de CONTLOC=DIR_INIC

ORG $FFF NOP INX

E_1 ADCA #3 END

Directivas del lenguaje ensamblador

ORG: indica el inicio de las directivas e instrucciones que afectan al contador de localidades. Solo debe de existir un solo “ORG”. (la etiqueta debe de ser nula).

END: indica el final del código en lenguaje ensamblador.

Directivas de constantes: o DW, DB, DC.W, DC.B, FCB, FDB, FCC

De un byte (DB, DC.B, FCB): DB (DEFINE BYTE), DC.B (DEFINE CONSTANT.BYTE), FCB (FULL CONSTANT BYTE). Todas estas pueden tomar valores entre 0 a 255, en cualquier base numérica. Este valor se representa como el OPERANDO. Incrementa el CONTADOR DE LOCALIDADES en 1.

De dos bytes (DW, DC.W, FDB): DW (DEFINE WORD), DC.W (DEFINE CONSTANT.WORD), FDB (FULL DOUBLE BYTE). Todas éstas pueden tomar valores entre 0 a 65535, en cualquier base numérica. Este valor se representa como el OPERANDO. Incrementan el CONTLOC en 2.

De caracteres (FCC): FCC (FULL CONSTANT CHARACTER). Su valor se representa entre comillas dobles (“valor”). El valor se representa con cualquier carácter del código ASCII. Este valor se representa como el OPERANDO. Incrementa el CONTLOC en su equivalente de longitud.

Directivas de reserva de espacio en memoria

DS, DS.B, DS.W, RMB, RMW.

Page 9: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

2

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

o De un byte en un byte: DS (DEFINE SPACE), DS.B (DEFINE SPACE.BYTE), RMB (RESERVE MEMORY BYTE). Todas éstas pueden tomar valores entre 0 a 65535, en cualquier base numérica. Este valor se representa como OPERANDO. Incrementa el CONTLOC de la siguiente manera: el valor numérico del OPERANDO se multiplica por 1 y se suma al CONTLOC.

o De dos bytes en dos bytes: DS.W (DEFINE SPACE.WORD), RMW (RESERVE MEMORY WORD). Todas éstas pueden tomar valores entre 0 a 65535, en cualquier base numérica. Este valor se representa como OPERANDO. Incrementa el CONTLOC de la siguiente manera: el valor del OPERANDO se multiplica por 2 y se suma al CONTLOC.

ORG 0 DW 2 Incrementa el CONTLOC en 2 DB 2 Incrementa el CONTLOC en 1 DC.W 2 Incrementa el CONTLOC en 2 DC.B 2 Incrementa el CONTLOC en 1 FCB 2 Incrementa el CONTLOC en 1 FDB 2222 Incrementa el CONTLOC en 2 DS 34 Incrementa el CONTLOC en 34 DS.B 34 Incrementa el CONTLOC en 34 DS.W 34 Incrementa el CONTLOC en 68 RMB 34 Incrementa el CONTLOC en 34 RMW 34 Incrementa el CONTLOC en 68 FCC “HOLA MUNDO” Incrementa el CONTLOC en 10 END

Otra directiva

EQU: Significa “EQUATE” (igualar). Debe de tener una etiqueta. Debe de tener un operando. El valor del operando puede estar en cualquier base numérica. Entre el rango de 0 a 65535. Esta directiva se puede situar indistintamente antes y después del ORG.

ET1 EQU 33 ET2 EQU 22 ORG $0 ET3 EQU 4 ET5 EQU 3 SWI ET6 ADCA #3 ET7 ADCA #4 ET8 EQU 2 END

ORG $0 UNO EQU 2 SWI DOS EQU 55555 END

Archivos auxiliares

TEMPORAL (de listado). Es un archivo de texto. Puede recibir los siguientes nombres: si el archivo que contiene el ejemplo de lenguaje ensamblador se llama P1asm.txt, el archivo TEMPORAL se puede llamar P1tmp.txt, o bien, P1lst.txt. Este archivo contiene la siguiente información:

o VALOR: de las variables DIR_INIC y CONTLOC. Este valor debe de representarse con el formato de dos bytes, es decir, si es necesario hay que complementar con ceros a la izquierda. Y siempre en formato hexadecimal. También se debe de representar el valor de la directiva EQU.

Page 10: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

3

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

o ETIQUETA. o CODOP o OPERANDO o Y cualquier otra información que se considere necesaria. No deben de incluirse las líneas de comentario.

Este archivo es la base para el PASO DOS del algoritmo ensamblador. El formato del archivo y los delimitadores son los que se consideran adecuados, sin olvidar que debe ser un formato de texto.

TABLA DE SÍMBOLOS: es un archivo de texto. Recibe el nombre TABSIM. La palabra SÍMBOLO es sinónimo de la palabra ETIQUETA. El nombre del archivo debe ser TABSIM.txt. Contiene la siguiente información:

o El VALOR de las variables: ETIQUETA. Y por cada ETIQUETA su valor correspondiente ya sea del:

CONTLOC, o bien de,

La directiva EQU

Ambos casos son válidos y son distintos, los valores deben de representarse en formato de dos bytes. Y siempre en formato hexadecimal.

Las etiquetas que tienen asociado su valor por el CONTLOC se conocen como relativas. Las etiquetas que tienen asociado su valor por la directiva EQU se conocen como ABSOLUTAS

o No pueden existir nombres de ETIQUETAS repetidas en este archivo, es decir, solo se pueden añadir las etiquetas previa verificación de que no estén repetidas. Este archivo se utiliza en el PASO DOS del algoritmo del ensamblador. El formato del archivo y los delimitadores son los que se consideren adecuados, sin olvidar que debe de ser un formato de texto.

Para el primer ejemplo el archivo TEMPORAL quedaría:

VALOR ETIQUETA CODOP OPERANDO

DIR_INIC 0FFF NULL ORG $FFF

CONTLOC 0FFF NULL NOP NULL

CONTLOC 1000 NULL INX NULL

CONTLOC 1001 E_1 ADCA #3

CONTLOC 1003 NULL END NULL

Para el primer ejemplo el archivo TABSIM quedaría:

ETIQUETA VALOR

CONTLOC (ETIQUETA RELATIVA)

E_1 1001

Para el segundo ejemplo el archivo TEMPORAL quedaría:

VALOR ETIQUETA CODOP OPERANDO

DIR_INIC 0000 NULL ORG 0

CONTLOC 0000 NULL DW 2

CONTLOC 0002 NULL DB 2

CONTLOC 0003 NULL DC.W 2

CONTLOC 0005 NULL DC.B 2

CONTLOC 0006 NULL FCB 2

CONTLOC 0007 NULL FDB 2222

CONTLOC 0009 NULL DS 34

CONTLOC 002B NULL DS.B 34

CONTLOC 004D NULL DS.W 34

CONTLOC 0091 NULL RMB 34

CONTLOC 00B3 NULL RMW 34

CONTLOC 00F7 NULL FCC “HOLA MUNDO”

CONTLOC 0101 NULL END NULL

Para este ejemplo no habría TABSIM, porque no hay etiquetas. Para el tercer ejemplo el archivo TEMPORAL quedaría:

VALOR ETIQUETA CODOP OPERANDO

DIR_INIC 0000 NULL ORG $0

VALOR EQU

0002 UNO EQU 2

CONTLOC 0000 NULL SWI NULL

VALOR EQU

D903 DOS EQU 55555

CONTLOC 0001 NULL END NULL

Para el tercer ejemplo el archivo TABSIM quedaría:

ETIQUETA VALOR

EQU (ETIQUETA ABSOLUTA) UNO 0002

EQU (ETIQUETA ABSOLUTA) DOS D903

Para el cuarto ejemplo el archivo TEMPORAL quedaría:

Page 11: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

4

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

VALOR ETIQUETA CODOP OPERANDO

VALOR EQU

0021 ET1 EQU 33

VALOR EQU

0016 ET2 EQU 22

DIR_INIC 0000 NULL ORG $0

VALOR EQU

0004 ET3 EQU 4

VALOR EQU

0003 ET5 EQU 3

CONTLOC 0000 NULL SWI NULL

CONTLOC 0001 ET6 ADCA #3

CONTLOC 0003 ET7 ADCA #4

VALOR 0002 ET8 EQU 2

EQU

CONTLOC 0005 NULL END NULL

Para el cuarto ejemplo el archivo TABSIM quedaría:

ETIQUETA VALOR

EQU (ETIQUETA ABSOLUTA) ET1 0021

EQU (ETIQUETA ABSOLUTA) ET2 0016

EQU (ETIQUETA ABSOLUTA) ET3 0004

EQU (ETIQUETA ABSOLUTA) ET5 0003

CONTLOC (ETIQUETA RELATIVA)

ET6 0001

CONTLOC (ETIQUETA RELATIVA)

ET7 0003

EQU (ETIQUETA ABSOLUTA) ET8 0002

Page 12: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

1

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #5

Obtener el código máquina de los direccionamientos inherente, inmediato, directo y extendido para los casos en que los operandos están representados con valores numéricos. Modificar la práctica #4 para obtener estos códigos máquina. El proceso base se centra en lo siguiente:

Leer cada línea del archivo temporal.

Por cada línea del archivo temporal, identificar sus cuatro partes y asignar sus valores a las variables: VALOR, ETIQUETA, CODOP y OPERANDO.

Una vez identificadas las partes, analizar la información encontrada; por cada modo de direccionamiento distinto el procedimiento es distinto.

Inherente

Buscar en el TABOP el valor de la variable CODOP.

Recuperar del TABOP el código máquina en formato hexadecimal.

Imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina encontrado.

Para el caso inherente no se debe calcular código máquina adicional.

VALOR ETIQUETA CODOP OPERANDO Lo que debe aparecer en pantalla

0000 NULL ORG 0

0000 NULL ABA NULL 1806

0002 NULL BGND NULL 00

0003 NULL END NULL

Directo

Buscar en el TABOP el valor de la variable CODOP.

Recuperar del TABOP el código máquina en formato hexadecimal.

Calcular el código máquina faltante: o Revisar el valor del OPERANDO (de acuerdo a las reglas presentadas en prácticas anteriores). o Transformar el valor en formato hexadecimal. o Concatenar el código máquina del TABOP con el código máquina recién calculado. o Complementar con ceros a la izquierda el código máquina del byte que se calcule.

Imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina encontrado.

VALOR ETIQUETA CODOP OPERANDO Lo que debe aparecer en pantalla

0000 NULL ORG 0

0000 NULL LDAA 85 9655

0002 NULL LDAA $0055 9655

0004 NULL LDX $20 DE20

0006 NULL END NULL

Extendido

Buscar en el TABOP el valor de la variable CODOP.

Recuperar del TABOP el código máquina en formato hexadecimal.

Calcular el código máquina faltante: o Revisar el valor del OPERANDO (de acuerdo a las reglas presentadas en prácticas anteriores). o Transformar el valor en formato hexadecimal. o Concatenar el código máquina del TABOP con el código máquina recién calculado. o Complementar con ceros a la izquierda el código máquina de los 2 bytes que se calcule.

Page 13: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

2

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina encontrado.

OPERANDO representado con ETIQUETAS: o Buscar en el TABOP el valor de la variable CODOP. o Recuperar el TABOP el código máquina en formato hexadecimal. o Calcular el código máquina faltante:

Buscar la ETIQUETA (que es el OPERANDO) en el TABSIM:

Si se encuentra: o Recuperar el valor de la ETIQUETA del TABSIM o Concatenar el código máquina del TABOP con el valor del TABSIM.

Si no se encuentra: o Generar un mensaje de error.

o Imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina encontrado.

VALOR ETIQUETA CODOP OPERANDO Lo que debe aparecer en pantalla

0000 NULL ORG 0

0038 VALOR1 EQU $38

0000 NULL LDAA @777 B601FF

0003 NULL LDAA $FFFF B6FFFF

0006 NULL LDAA VALOR1 B60038

0009 NULL END

Inmediato

Buscar en el TABOP el valor de la variable CODOP.

Recuperar del TABOP el código máquina en formato hexadecimal.

Calcular el código máquina faltante: o Revisar el valor del OPERANDO (de acuerdo a las reglas presentadas en prácticas anteriores). o Determinar si es de 1 o de 2 bytes y generar un error en caso de que no proceda. o Transformar el valor en formato hexadecimal. o Concatenar el código máquina del TABOP con el código máquina recién calculado. o Complementar con ceros a la izquierda el código máquina del byte que se calcule.

Imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina encontrado.

VALOR ETIQUETA CODOP OPERANDO Lo que debe aparecer en pantalla

0000 NULL ORG 0

0000 NULL LDAA #$55 8655

0002 NULL LDX #$1234 CE1234

0005 NULL LDY #%1100111 CD0067

0008 NULL END NULL

Page 14: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

1

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA # 6

Obtener el código máquina de los direccionamientos indizados simples. Modificar el

programa de la práctica número 5 para obtener el código máquina de los direccionamientos

simples.

leer cada línea del archivo temporal

o por cada línea del archivo temporal, dividir la línea en 4 partes: VALOR,

ETIQUETA, CODOP, OPERANDO.

una vez identificadas las partes analizar la información encontrada, por cada modo

de direccionamiento el procedimiento es distinto, se explican a continuación.

INDIZADO 5 BITS: FORMA “IDX”. REGISTRO X, Y, SP, PC. DE -16 A 15 (VALORES

DECIMALES)

buscar en el TABOP el valor de la variable CODOP.

recuperar del TABOP el código máquina en formato hexadecimal.

imprimir en pantalla por cada línea del archivo TEMPORAL el código maquina

encontrado

Si buscamos en el TABOP la instrucción LDAA encontramos que:

el código máquina calculado para IDX es A6.

el código máquina por calcular dice “xb” y se corresponde con un byte

¿Cómo calcular el byte “xb”?

se puede hacer de dos manera:

o utilizando una fórmula

VALOR ETIQUETA CODOP OPERADOR IMPRIME EN PANTALLA

0000 NULL ORG $0

0000 NULL LDAA ,X A600

0002 NULL LDAA 0,X A600

0004 NULL LDAA 1,X A601

0006 NULL LDAA 15,X A60F

0008 NULL LDAA -1,X A61F

000A NULL LDAA -16,X A610

000C NULL STAB -8,Y 6B58

000E NULL END NULL

Page 15: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

2

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

o creando una tabla de “bytes xb” para su consulta.

1. formula:

Postbyte code (xb) Source code syntax Valores de “rr” . X=00, Y=01, SP=10, PC=11

rr0nnnnn ,r n,r -n,r

n=-16 a + 15 r puede ser X, Y, SP, o PC

SI tenemos, X o tenemos 0, X entonces:

rr=00 porque el registro X=00

nnnnn=00000 porque la sintaxis ,X equivale a 0,X

sustituyendo en rr0nnnn

o 00000000

o tomando los primeros 4 bits es igual a 0

o el resultado es 00

concatenar el valor encontrado en el TABOP con el valor del byte XB, quedando

entonces A600

2. tabla:

00 0,x 5b const

la tabla debe de contener:

o el valor del byte xb

o la sintaxis propuesta

o un indicador, por ejemplo, 5bconst

Si tenemos, X o tenemos 0,X entonces:

consultar el valor del OPERANDO=”,X “ u OPERANDO=”0,X” en la tabla

si hay coincidencia entonces extraer el valor del byte xb

concatenar el valor encontrado en el TABOP con el valor del byte XB, quedando

entonces A6000.

INDIZANDO 9 BITS: FORMA “IDX1”. REGISTROS X, Y,SP,PC. DE-256 A 255 (VALORES

DECIMNALES). (-256 A -17,16 A 255).

buscar en el TABOP el valor de la variable COCOP.

recuperar del TABOP el código maquina en formato hexadecimal.

Page 16: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

3

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina

encontrado

VALOR ETIQUETA CODOP OPERANDO Imprime en pantalla

0000 NULL ORG $0

0000 NULL LDAA 255,X A6E0FF

0003 NULL LDAA 34,X A6E022

0006 NULL LDAA -18,X A6E1EE

0009 NULL LDAA -256,X A6E100

000C NULL LDAA -20,Y A6E9EC

000F NULL END NULL

Si buscamos en el TABOP la instrucción LDAA encontramos que:

el código máquina calculado para IDX1 es A6.

el código máquina por calcular dice “xbff” y se corresponde con dos bytes.

¿Cómo calcular el byte “xb”?

se puede hacer de dos maneras:

o utilizando la fórmula.

o creando una tabla de “bytes xb” para su consulta

1. formula:

Postbyte code (xb)

Source code syntax

Valores de “rr”, X=00, Y=01, SP=10, PC=11

111rr0zs N,r -n,r

Z=0 S=0 r puede ser X, Y, SP, O PC

Si tenemos 255, X entonces:

rr=00 porque el registró X=00

Z=0

S=0

sustituyendpo en 111rr0zs tenemos:

o 11100000

o tomando los primeros 4 byts es igual a E.

o tomando los según dos 4 bits es igual a 0.

Page 17: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

4

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

o el resultado es E0.

concatenar el valor encontrado en el TABOP con el valor del byte “xb”, quedando

entonces A6E0.

concatenar el valor del operador “255” en la posición del “ff”, quedando entonces

A6E0FF.

2. TABLA:

E0 n,X 9b const

la tabla debe de contener

o el valor del byte xb

o la sintaxis propuesta

o un indicador, por ejemplo, 9bconst

Si tenemos 255, X entonces es de 9 bits:

consultar el modo de direccionamiento (indizado de 9 bits) en la tabla

si hay coincidencia entonces extraer el valor del byte xb

concatenar el valor encontrado en el TABOP con el valor del byte XB, quedando

entonces A6E0.

concatenar el valor del operando “255” en la posición del “ff”, quedando entonces

A6E0FF.

INDIZADO 16 BITS: FORMA “IDX2”. REGISTRADOS X, Y, SP, PC, DE 0 A 65535

(VALORES DECIMALES). (256 A 65535)

buscar en el TABOP el valor de la variable CODOP.

recuperar del TABOP el código máquina en formato hexadecimal.

imprimir en la pantalla por cada línea del archivo TEMPORAL el código máquina

encontrado

VALOR ETIQUETA CODOP OPERANDO Imprimir pantalla

0000 null ORG $0

0000 Null LDAA 31483,X A6E27AFB

0004 Null END

Si buscamos en el TABOP la instrucción LDAA encontramos que:

el código máquina calculado para IDX2 es A6.

el código máquina por calcular dice “xbeeff” y se corresponde con tres bytes.

Page 18: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

5

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

¿Cómo calcular el byte”xb”?

se puede hacer de dos maneras

o utilizando una fórmula

o creando una tabla de “bytes xb” para su consulta.

1. FORMULA:

PostbyteCode (xb) Source Code Syntax Valores de “rr”.X=00, Y=01, SP=10,PC=11

111rr0zs n,r z=1 s=0 r puede ser X,Y,SP o PC

Si tenemos 31483,X entonces:

Rr=00 porque el registro X=00

z=1

s=0

sustituyendo en 11rr0zs tenemos:

o 11100010

o tomando los primeros 4 bits es igual a E

o tomando los segundo 4 bits es igual a 2

o el resultado es E2

Concatenar el valor encontrado en le TABOP con el valor del byte “xb”, quedando

entonces A6E2

Concatenar el valor del operando “31483” en la posición del “eeff”, quedando

entonces A6E27AFB.

2. TABLA:

E2 n,X 16b const

La tabla debe contener:

o El valor del byte xb

o La sisntaxis propuesta

o Un indicador, por ejemplo 16bconst

Si tenemos 31483,X entonces es de 16 bits:

Consultar el modo de direccionamiento (indizado de 16 bits) en la tabla

Si hay conincidencia entonces extraer el valor del byte xb

Page 19: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

6

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Concatenar el valor encontrado en el TABOP con el valor del byte XB, quedando

entonces A6E2.

Concatenar el valor del operando “31483” en la posición del “eeff”, quedando

entonces A6E2FF7AFB.

INDIZADO PRE/POST INCREMENTO/DECREMENTO: FORMA “IDX”. REGISTRO X,Y,SP DE 1

A 8 (VALORES DECIMALES).

Buscar en el TABOP el valor de la variable CODOP.

Recuperar del TABOP el código máquina en formato hexadecimal.

Imprimir en pantalla por cada linea del archivo TEMPORAL el código máquina

encontrado

VALOR ETIQUETA CODOP OPERANDO Imprime en pantalla

0000 NULL ORG $0

0000 NULL STAA 1,-SP 6AAF

0002 NULL STAA 1,SP- 6ABF

0004 NULL STX 2,SP+ 6EB1

0006 NULL STX 2,+SP 6EA1

000E NULL END NULL

Si buscamos en el TABOP la instrucción STAA encontramos que:

El código máquina calculado para IDX es 6ª.

El código máquina por calcular dice “xb” y se corresponde con un byte.

Si buscamos en le TABOP la instrucción STX encontramos que:

El código máquina calculado para IDX es 6E.

El codigo máquina por calcular dice “xb” y se corresponde un byte

¿Comó calcular el byte “xb”?

Se puede hacer de dos maneras:

o utilizando una fórmula.

o Creando una tabla de “bytes xb” para su consulta.

FORMULA:

PostbyteCode (xb) Source Code Syntax Valores de “rr”.X=00, Y=01, SP=10,PC=11

rr1pnnnn n,-r n,+r

p=pre(0) p=post(1)

Page 20: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

7

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

n,r- n,r+

n=-8 a -1, +1 a +8 r puede ser X,Y, o SP +8=0111 +7=0110 +6=0101 +5=0100 +4=0011 +3=0010 +2=0001 +1=0000 -1=1111 -2=1110 -3=1101 -4=1100 -5=1011 -6=1010 -7=1001 -8=1000

Si tenemos 1,-SP entonces:

rr = 10 porque el regitro de sp=10

nnnn = 1111 por que la sintaxis 1,-SP ( se interpreta como -1)

p=0 porque es “Pre”

sustituyendo rr1pnnnn tenemos:

o 10101111

o tomando los primeros 4 bytes es igual a A

o tomando los segundos 4 bytes es igula a F

o el resultado es AF

Concatenar el valor encontrado en el TABOP con el vaor del byte XB, quedando

entonces 6AAF.

2. TABLA:

AF 1,-SP Pre-dec

Page 21: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

8

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

La tabla debe de contener:

o El valor del byte xb

o La sintaxis propuesta.

o Un indicador, por ejemplo, pre-dec

Si tenemos 1,SP entonces:

Consultar le valor del OPERANDO= “1,-SP” en la tabla

Si hay coincidencia entonces extraer el valor del byte xb

Concatenar el valor encontrador en el TABOP con el valor del byte XB, quedando

entonces 6AAF.

INDIZADO DE ACUMULADOR: FORMA “IDX”. REGISTRO DEL LADO IZQUIERDO: A, B, D.

REGISTROS DEL ALDO DERECHO: X,Y, SP O PC.

Buscar en el TABOP el valor de la variable CODOP.

Recuperar del TABOP el código maquina en formato hexadecimal.

Imprimir e pantalla cada linea del archivo TEMPORAL el código máquina

encontrado

VALOR ETIQUETA CODOP OPERANDO Imprime en pantalla

0000 NULL ORG $0

0000 NULL LDAA B,X A6E5

0002 NULL LDAA A,X A6E4

0004 NULL LDAA D,X A6E6

0006 NULL END NULL

Si buscamos en el TABOP la instrucciona LDAA encontramos que:

El código máquina calculado es de IDX es A6.

El código máquina por calcular dice “xb” y se corresponde con un byte.

¿Cómo calcular el byte “xb”?

Se puede hacer de dos maneras:

o Utilizando la fórmula

o Creando una tabla de “bytes xb” para su consulta.

1. FORMULA:

PostbyteCode (xb) Source Code Syntax Valores de “rr”.X=00, Y=01, SP=10,PC=11

Page 22: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

9

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

111rr1aa A,r B,r D,r

aa: 00=A 01=B 10=D r puede ser Y,X,SP o PC

Si tenemos B,X entonces:

rr = 00 porque el registro de X=00

aa =01 porque el registro de B=01

sustituyendo en 111rr1aa tenemos:

o 11100101

o tomando los primeros 4 bytes es igual a E

o tomando los segundos 4 bytes es igual a 5

o el resultado es E5

concatenando el valor encontrado en el TABOP con el valor del byte XB,

quendando entonces A6e5.

2. TABLA:

E5 B,X B Offset

la tabla debe de contener:

o el valor del byte xb

o la sintaxis propuesta

o un indicador, por ejemplo B Offset

si tenemos B,x entonces:

consultar el valor del OPERANDO = “B,X” en la tabla

si hay coincidencia entonces extraer le valor del byte xb

concatenar el valor encontrado en el TABOP con el valor del byte XB, quedando

entonces A6E5.

Page 23: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

10

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Reporte:

1. Describir los algoritmos utilizados para calcular los bytes xb para cada uno de los

posibles modos de indizados.

Page 24: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

11

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Tabla de bytes Xb

Page 25: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

1

Universidad de Guadalajara Centro universitario de los Altos Ingeniería en Computación Seminario de traductores de lenguaje I

PRÁCTICA #7

Modificar el programa anterior para obtener el código máquina de los modos de direccionamiento indizados complejos.

Leer cada línea del archivo temporal.

Por cada línea del archivo temporal, debemos de dividir la línea en 4 partes: VALOR, ETIQUETA, CODOP, OPERANDO.

Una vez identificadas las partes se procede a analizar la información encontrada. INDIZADO 16 BITS INDIRECTO: FORMA “[IDX2]”; REGISTROS X,Y,SP,PC; DE 0 A 65535 (VALORES DECIMALES).

Buscar en le TABOP el valor de la variable CODOP.

Recuperar el TABOP el código máquina en formato hexadecimal.

Imprimir en la pantalla por cada línea del archivo TEMPORAL el código máquina encontrado.

VALOR ETIQUETA CODOP OPERANDO Imprime en pantalla

0000 NULL ORG $0

0000 NULL LDAA [10,X] A6E3000A

0004 NULL LDAA [31483,X] A6E37AFB

0008 NULL END NULL

Si buscamos en el TABOP la instrucción LDAA encontramos que:

El código máquina calculado para [IDX2] es A6.

El código máquina por calcular dice “xbeeff” y se corresponde con tres bytes. ¿Cómo calcular el byte “xb”?

Se puede hacer de dos maneras: o Utilizando una fórmula. o Creando la tabla de “bytes xb” para su consulta.

1. Formula:

Postbyte Code (xb) Source Code Syntax Valores de “rr”. X=00, Y=01, SP=10, PC=11

111rr011 [n,r] 0 < n > 65535 r puede ser X,Y,SP o PC

Si tenemos [10,X] entonces:

rr = 00 porque el registro X=00

Page 26: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

2

Universidad de Guadalajara Centro universitario de los Altos Ingeniería en Computación Seminario de traductores de lenguaje I

sustituyendo en 111rr011 tenemos: o 11100011 o tomando los primeros 4 bits es igual a E. o Tomando los segundos 4 bits es igual a 3. o El resultado es E3.

Concatenar el valor encontrado en el TABOP con el valor del byte XB quedando entonces A6E3

Luego concatenar el valor de “n” en los dos bytes “eeff” (complementando con ceros a la izquierda) cuando sea necesario, quedando entonces “A6E3000A”

2. Tabla

E3 [n,X] 16b Indr

La tabla debe de contener: o El valor del byte xb o La sintaxis propuesta o Un indicador, por ejemplo, 16bIndr

Si tenemos [10,X] entonces:

Consultar el modo del direccionamiento (indizado de 16 bits indirecto) en la tabla.

Si hay coincidencia entones extraer el valor del byte xb.

Concatenar el valor encontrado en el TABOP con el valor del byte XB, quedando entonces A6E3.

Luego concatenamos el valor de “n” en los dos bytes “eeff” (completando con ceros a la izquierda) cuando sea necesario, quedando entonces “A6E3000A”

INDIZADO DE ACUMULADOR “D” INDIRECTO: FORMA [D,IDX]; REGISTRO DEL LADO IZQUIERDO: D; REGISTRO DEL LADO DERECHO: X,Y,SP O PC).

Buscar en el TABOP el valor de la variable CODOP.

Recuperar del TABOP el código máquina en formato hexadecimal.

Imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina encontrado.

VALOR ETIQUETA CODOP OPERANDO Imprime en pantalla

0000 NULL ORG $0

0000 NULL JMP [D,PC] 05FF

Page 27: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

3

Universidad de Guadalajara Centro universitario de los Altos Ingeniería en Computación Seminario de traductores de lenguaje I

0002 NULL ADCA [D,X] A9E7

0004 NULL ADCB [D,SP] E9F7

0006 NULL ADDA [D,Y] ABEF

0008 NULL END NULL

Si buscamos en el TABOP la instrucción ADCA encontramos que:

El código máquina calculado para [D,IDX] es A9.

El código máquina por calcular dice “xb” y se corresponde como un byte. ¿Cómo calcular el byte “xb”?

Se puede hacer de dos maneras: o Utilizando una formula. o Creando una tabla de “bytes xb” para su consulta.

1.Formula:

Postbyte Code (xb) Source Code Syntax Valores de “rr”. X=00, Y=01, SP=10, PC=11

111rr111 [D,r] r puede ser X,Y,SP o PC

Si tenemos [D,X] entonces:

rr = 00 porque el registro X=00

sustituyendo en 111rr111 tenemos: o 11100111 o tomando los primeros 4 bits es igual a E. o Tomando los segundos 4 bits es igual a 7. o El resultado es E7.

Concatenar el valor encontrado en el TABOP con el valor del byte XB quedando entonces A9E7

2.Tabla

E7 [D,X] D Indr

La tabla debe de contener: o El valor del byte xb o La sintaxis propuesta o Un indicador, por ejemplo, D Indr

Si tenemos [D,X] entonces:

Consultar el modo del direccionamiento (indizado de acumulador “D” indirecto) en la tabla.

Page 28: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

4

Universidad de Guadalajara Centro universitario de los Altos Ingeniería en Computación Seminario de traductores de lenguaje I

Si hay coincidencia entones extraer el valor del byte xb.

Concatenar el valor encontrado en el TABOP con el valor del byte XB, quedando entonces A9E7.

Page 29: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #8

Modos relativos (de 8 y 16 bits). Modificar el programa anterior para obtener el código máquina

de los modos relativos.

o Leer cada línea del archivo temporal.

-Por cada línea del archivo temporal, debemos de dividir la línea en 4 partes: VALOR,

ETIQUETA CODOP, OPERANDO.

o Una vez identificadas las partes se procede a analizar la información encontrada, por cada

modo de direccionamiento distinto el procedimiento es distinto, se explican a

continuación.

RELATIVOS DE 8 Y DE 16 BITS. RELATIVOS DE 8 Y DE 16 BITS. LOS OPERANDOS SE REPRESENTAN

CON ETIQUETAS. LAS INSTRUCCIONES QUE SON DE 16 BITS CON LA LETRA “L” (LONG). POR CADA

INSTRUCCIÓN LONG HAY UNA SHORT (POR “LBRA” HAY UNA “BRA” 8 BITS).

o Buscar en el TABOP el valor de la variable CODOP.

o Recuperar del TABOP el código máquina en el formato hexadecimal.

o Imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina encontrado.

VALOR ETIQUETA CODOP OPERANDO Imprime pantalla

0017 NULL ORG $17

0030 UNO EQU $30

0050 DOS EQU $50

0017 NULL BRA UNO 2017

Siguiente CONTLOC 0019 NULL LBRA DOS 18200033

001D NULL BCS UNO 2511

001F NULL LBCS TRES 18250000

Siguiente CONTLOC 0023 TRES BCS DOS 252B

0025 CUATRO SWI NULL 3F

0026 NULL END NULL

TABSIM

UNO 0030

DOS 0050

TRES 0023

CUATRO 0025

Si buscamos en el TABOP la instrucción BRA encontramos que:

o El código máquina calculado para REL es 20.

o El código máquina por calcular dice “rr” y se corresponde con un byte por lo tanto es de 8

bits.

Page 30: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

¿Cómo calcular el byte “rr”?

o Se tiene que calcular el valor que se denomina DESPLAZAMIENTO.

El valor del desplazamiento para 8 bits tienes que tener un valor entre -128 a 127.

Se calcula en tiempo de ejecución durante el paso 2.

Si el valor del desplazamiento no se encuentra en el rango permitido entonces es

un error.

Si el valor del desplazamiento si se encuentra en el rango permitido entonces se

completa el valor código máquina, concatenando el valor del byte que ya está

calculado con el valor del desplazamiento.

En caso de ser necesario se debe de complementar con un cero a la izquierda del

byte que se corresponda con el desplazamiento.

El byte ya calculado tiene un valor de “20” y el valor del desplazamiento es de

“17” entonces el valor del código máquina es de “2017”.

o Para obtener el desplazamiento se hizo lo siguiente:

Buscar en el TABSIM el valor del OPERANDO= “UNO”

Si se encuentra el valor del operando en TABSIM, se tiene que recuperar el valor

que le corresponda que sería “0030”.

Este valor hay que transformarlo en su representación numérica.

Entonces se debe restar el valor del operando menos el valor del SIGUIENTE

contador de localidades que sería “0019”.

Desplazamiento: 48 - 25 = 23 (en su representación hexadecimal seria 30 – 19 = 17).

Si el valor del desplazamiento fuera negativo hay que realizar complemento para

obtener su representación hexadecimal, del valor del complemento hay que tomar

el “byte más significativo” (byte más a la derecha).

Hay que validar el rango de desplazamiento. ¿23 está entre -128 a 127?

Si es así entonces concateno el valor “20” con el valor “17”

Si no es así entonces se generan un error: “RANGO DEL

DESPLAZAMIENTO NO VÁLIDO”.

Si buscamos en el TABOP la instrucción LBCS encontramos que:

o El código máquina calculado para REL es 1825.

o El código máquina por calcular dice “qqrr” y se corresponde con un byte por lo tanto es de

16 bits.

¿Cómo calcular el byte “qqrr”?

o Se tiene que calcular el valor que se denomina DESPLAZAMIENTO.

Page 31: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

El valor del desplazamiento para 16 bits tienes que tener un valor entre -

32768 a 32767.

Se calcula en tiempo de ejecución durante el paso 2.

Si el valor del desplazamiento no se encuentra en el rango permitido

entonces es un error.

Si el valor del desplazamiento si se encuentra en el rango permitido

entonces se completa el valor código máquina, concatenando el valor de

los dos bytes que ya está calculado con el valor del desplazamiento.

En caso de ser necesario se debe de complementar con un cero a la

izquierda del byte que se corresponda con el desplazamiento.

Los dos bytes ya calculados tiene un valor de “1825” y el valor del

desplazamiento es de “0000” entonces el valor del código máquina es de

“18250000”.

o Para obtener el desplazamiento se hizo lo siguiente:

Buscar en el TABSIM el valor del OPERANDO= “TRES”

Si se encuentra el valor del operando en TABSIM, se tiene que recuperar el

valor que le corresponda que sería “0023”.

Este valor hay que transformarlo en su representación numérica.

Entonces se debe restar el valor del operando menos el valor del

SIGUIENTE contador de localidades que sería “0023”.

Desplazamiento: 35 - 35 = 0 (en su representación hexadecimal seria 23 –

23 = 0).

Si el valor del desplazamiento fuera negativo hay que realizar

complemento para obtener su representación hexadecimal, del valor del

complemento hay que tomar los “bytes más significativos” (bytes más a la

derecha).

Hay que validar el rango de desplazamiento. ¿00 está entre -132768 a

32767?

Si es así entonces concateno el valor “1825” con el valor “0000”

Si no es así entonces se generan un error: “RANGO DEL

DESPLAZAMIENTO NO VÁLIDO”.

Otros ejemplos

VALOR ETIQUETA CODOP OPERANDO Imprime pantalla

0000 NULL ORG $0

0000 UNO DS 10

000A NULL BRA UNO 20F4

Siguiente CONTLOC 000C DOS DS 4096

100C NULL LBRA DOS 1820EFFC

Siguiente CONTLOC 1010 NULL END NULL

Page 32: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

TABSIM

UNO 0000

DOS 000C

Desplazamientos:

0 – 12 = -12 (000 – 000C = FFF4)

12 – 4112 = -4100(000C – 1010 = EFFFC)

Page 33: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

1

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #9 Obtener el código maquina utilizando etiquetas (extendido), y obtener el código máquina de las directivas de tipo CONSTANTE (de 1, de 2 bytes y de carácter).

o Leer cada línea del archivo temporal.

o Por cada línea del archivo temporal, debemos de dividir la línea en 4 partes:

VALOR

ETIQUETA

CODOP

OPERANDO

o Una vez identificadas las partes se procede a analizar la información encontrada, por cada modo de

direccionamiento O POR CADA DIRECTIVA el procedimiento es distinto, se explican a continuación.

ENTENDIDO

o Buscar en el TABOP el valor de la variable CODOP.

o Recuperar del TABOP el código máquina en formato hexadecimal.

o Si el OPERANDO está representado con ETIQUETAS:

Buscar en el TABOP el valor de la variable CODOP.

Recuperar el TABOP el código máquina en el formato hexadecimal.

Calcular el código máquina faltante:

Buscar la ETIQUETA (que es el OPERANDO) en el TABSIM:

Sí se encuentra:

Recuperar el valor de la ETIQUETA del TABSIM.

Concatenar el código máquina del TABOP con el valor del TABSIM.

Sí no se encuentra:

Generar un mensaje de error.

Imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina encontrado.

VALOR ETIQUETA CODOP OPERANDO Lo que debe decir en la pantalla

0000 NULL ORG 0

0038 VALOR1 EQU $38

0000 NULL LDAA VALOR1 F60038

0003 NULL END

DIRECTIVAS DE CONSTANTES DEL LENGUAJE ENSAMBLADOR

o DE UN BYTE (DB, DC.B, FCB): Todas estas pueden tomar valores entre 0 a 255, en cualquier base numérica.

Este valor se representa como el OPERANDO. Incrementan el CONTADOR DE LOCALIDADES (CONTLOC) en

1.

o DE DOS BYTES (DW, DV.W, FDB): Todas estas pueden tomar valores entre 0 a 65535, en cualquier base

numérica. Este valor se representa como el OPERANDO. Incrementan el CONTADOR DE LOCALIDADES

(CONTLOC) en 2.

Page 34: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

2

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

o DE CARACTERES (FCC): Su valor se representa entre comillas dobles (“valor”). El valor se representa con

cualquier carácter del código ASCII (incluso, por ejemplo, el espacio en blanco). Este valor se representa

como el OPERANDO. Incrementa el CONTADOR DE LOCALIDADES (CONTLOC) en su equivalente de

(longitud del operando -2).

Identificar que el valor de la variable CODOP sea una directiva de tipo constante.

Calcular el código máquina en formato hexadecimal de la directiva.

Imprimir en pantalla por cada línea del archivo TEMPORAL el código máquina calculado.

VALOR ETIQUETA CODOP OPERANDO Imprime en pantalla

0000 NULL ORG $0

0000 NULL DW 4096 1C00

0002 NULL DB 15 OF

0003 NULL DW 65536 Error

0005 NULL DB 4096 Error

0006 NULL FCC “hola mundo” 686F6C61206D756E646F

0010 NULL END NULL

o Para el caso de DW (y sus sinónimos) se debe de verificar que el valor del operando sea numérico, que

este en un rango de 0 a 65535, y representarlo en base hexadecimal. Si es necesario se debe de completar

con ceros a la izquierda. En caso de que exceda el rango se debe mostrar un mensaje de error.

o Para el caso de DB (y sus sinónimos) se debe de verificar que el valor del operando sea numérico, que este

en un rango de 0 a 255, y representarlo en base hexadecimal. Se debe de completar con ceros a la

izquierda. En caso de que exceda el rango se debe mostrar un mensaje de error.

o Para el caso de FCC se debe de obtener el valor de ASCII de cada carácter que se encuentre en comillas,

este valor se debe de representar en base hexadecimal. Por ejemplo, la letra “h” se corresponde con el

valor 104 ASCII y se representa con el valor 68 en formato hexadecimal; el espacio en blanco se

corresponde con el valor 32 ASCII y se representa con el valor 68 en formato hexadecimal; el espacio en

blanco se corresponde con el valor 32 ASCII y se representa con el valor 20 en formato hexadecimal. Se

deben de distinguir claramente entre los valores de las letras mayúsculas y las letras minúsculas, por

ejemplo:

ORG $0 FCC ´h´(código máquina 68) FCC ´H´ (código máquina 48) END

o El resto de las directivas como son DS, DS.B, DS.W, RMB y RME no generan código máquina.

Reporte: Describir como se obtienen los códigos máquinas de las directivas y como se obtiene el código máquina del modo de direccionamiento, extendido.

Page 35: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

1

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #10

Generar el archivo objeto. Considerando como influyen las directivas de reserva de espacio y su

relación con la generación del archivo de código máquina.

Para realizar esta práctica es necesario conocer los registros del código objeto para la arquitectura

HC12, como son S0, S1 y S9. El código objeto se representa con un archivo que genera en tiempo

de ejecución y que tiene la extensión.OBJ o .S19, es un archivo de texto y contiene todos los

códigos máquinas que se generan desde el archivo temporal y que se representan en formato

hexadecimal. Los formatos de los registros son los siguientes:

Tipo del registro Puede ser $0, $1 o $9.

Longitud del registro S0: tiene una longitud variable en bytes. S1: tiene una longitud máxima de 19 (13 hex.) bytes. S9: tiene una longitud máxima de 3 (3 hex.) bytes.

Dirección S0: tiene siempre una dirección de 0000. S1: tiene una dirección variable y se toma del archivo temporal. S9: tiene siempre una dirección de 0000.

Código o datos S0: se corresponde al nombre del archivo .ASM, incluye el nombre de la unidad de disco, y caracteres de control como el enter. S1: se corresponde al código máquina que se genera línea por línea desde el archivo temporal. S9: este campo no aplica para este registro.

Checksum S0: su valor nunca será igual. S1: su valor será diferente para cada registro de este tipo. S1: su valor será diferente para cada registro de este tipo. S9: su valor siempre será FC.

Siempre se generará sólo un registro S0, se generaran uno o varios registros S1 y siempre se

generara solo un registro S9.

El registro S0 se conoce como “registro de encabezamiento” o como el registro H.

El registro S1 se conoce como “registro de texto” o como el registro T.

El registro S9 se conoce como “registro de fin” o como el registro E.

La longitud del registro se corresponde con la cantidad de pares de caracteres representados en

el registro, sin contar el tipo y el área para representar la longitud, por ejemplo: S1051041653F05

En este ejemplo el valor de la longitud está subrayado (05) significa que hay 5 pares de caracteres que se corresponderían con 10 41 65 3F 05.

Page 36: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

2

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

El campo del checksum se calcula sumando los valores representados por pares (incluyendo los valores de la longitud, la dirección, el código y los datos) a la suma se le calcula el complemento a uno y se representa el resultado tomando el byte menos significativo del complemento. Por ejemplo:

S10410443F-- En este caso en el ejemplo se está representado el tipo (S1), la longitud que es (04), la dirección que es (1044), cl código o datos que es (3F) y falta representar en el último par el byte del checksum. El checksum para este ejemplo es de (68), para calcularlo se realizó la siguiente suma 04+10+44+3F= 97, se obtiene complemento a uno y da como resultado FF68, se toma el byte que está representado a la derecha de este resultado (68) y este es el que se representa al final del registro S1. El registro S1 terminado se representaría de la siguiente manera:

S10410443F68 El nombre del archivo que se representa en cl registro SO se ejemplifica en el siguiente caso:

S015000046696C653A2041736D54656D702E61736DOA Este ejemplo consta de las siguientes partes:

SO cs el tipo

15 es la longitud del registro

0000 es la dirección del registro

46696C653A2041736D54656D702E61736DOA es el nombre el archivo

EO es el checksum Los valores representados en el nombre del archivo se corresponden con los caracteres enlistados en la segunda fila de esta matriz.

46 69 6C 65 3A 20 41 73 6D 54 65 6D 70 2E 61 73 6D 0A

F i l e : A s m T e m p . a s m LF

En realidad en donde dice "File: "se tiene que representar el nombre de la unidad donde está almacenado el archivo .ASM por ejemplo "A:" que se representaría en hexadecimal como 413A.

En donde dice "AsmTemp" se debe de representar el nombre del archivo .ASM.

En donde dice ".asmLF" siempre se debe de representar la terminación (es decir la extensión más el carácter LF) del archivo con el código en ensamblador.

El registro S9 siempre contiene una longitud de 03, una dirección de 0000 y un checksum de FC, por lo tanto, siempre tendrá cl siguiente valor:

S903000FC. Cuando se haga referencia a "una línea de listado" se refiere a que en el programa Ensamblador (por ejemplo, programa en lenguaje C) se estarán calculando y concatenando todos los elementos necesarios para crear cada uno de los registros del código objeto (SO, S1 y S9). Para preparar la línea de listado del registro SO necesitan conocer sólo el nombre del archivo .ASM (o bien el nombre del archivo .TXT). El tipo siempre será constante SO, la longitud siempre se debe de calcular en tiempo de ejecución. La dirección siempre será 0000, y el checksum siempre se

Page 37: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

3

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

calcula en tiempo de ejecución, cuando el programa calcula y tiene identificado todos elementos los debe de concatenar como un solo elemento y como es cl primer registro del archivo de código objeto se debe de crear el ARCHIVO OBJETO. Este archivo se crea en tiempo de ejecución con la extensión .OBJ o bien con la extensión .S19. Una vez que se crea el archivo se añade la 'línea de listado" en su representación de registro SO. La longitud de este registro siempre podrá tener un valor mínimo que sería de 08, distribuida de la siguiente manera:

2 pares de la dirección

5 pares de la extensión (.ASM If) 0 (.TXTlf)

1 par del checksum Para preparar la línea de listado del registro S1, el algoritmo se complica, en el sentido de que se tiene que estar leyendo el archivo temporal y por cada línea que crea código máquina se debe de añadir información a la línea de listado de un registro S1 o bien crear una nueva línea de listado. Los registros S1 tienen una longitud máxima de 19 (en su representación en hexadecimal 13), estos 19 pares de caracteres están distribuidos de la siguiente manera, consideremos el ejemplo:

S1131000A9E30000A9EB0000A9F30000A9FB00007C

S1 es el tipo del registro y no se contabiliza entre los 19 pares de caracteres.

13 es la longitud del registro y no se contabiliza entre los 19 pares de caracteres.

El resto del ejemplo se corresponde con estos 19 pares: o 1000A9E30000A9EBOOOOA9F30000A9FB00007C

Son dos pares de la dirección (1000)

Son 16 pares del código o datos (A9E30000A9EB0000A9F30000A9FB0000)

Es un par del checksum (7C)

En total suman los 19 pares, 2+16+1 que se corresponden a los pares de la longitud + pares del código o datos + par del checksum.

La longitud mínima del registro S1 será de 03, los cuales son están representados por los siguientes valores: Son dos pares de la dirección, y un par del checksum. Para obtener el código máquina del siguiente ejemplo, se debe de proceder de la siguiente manera:

No. de línea Valor Etiqueta Codop Operando Código máquina

1 NULL Org $1000

2 NULL Adca [0,x] A9e30000

3 NULL Adca [0,y] A9eb0000

4 NULL Adca [0,sp] A9f30000

5 NULL Adca [0,pc] A9fb0000

6 NULL Swi NULL 3f

7 NULL Ds.b $20

8 NULL Adca [0,x] A9e30000

9 NULL adca [0,y] A9eb0000

10 NULL adca [0,pc] A9f30000

11 NULL fcc ‘abcde’ 6162636465

Page 38: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

4

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

12 NULL Swi NULL 3f

13 NULL Ds.b $1

NULL Swi NULL 3f

NULL Ds.b $1

NULL Swi NULL 3f

NULL Swi NULL 3f

NULL Swi NULL 3f

NULL Swi NULL 3f

NULL Swi NULL 3f

NULL Ds.b $1

NULL Fcc “abcde” 6162636465

NULL end NULL

Línea no. 1. Como el CODOP = ORG entonces se debe de crear el registro S0. Una vez creado se deberá de añadir al archivo que tenga la extensión .OBJ. Leer la siguiente línea de entrada. Línea no. 2. Generar el código máquina (A9E30000). Añadirlo en un registro S1. Si no existe un registro S1 entonces hay que crearlo, parte por parte.

S1+longitud+dirección+código+checksum

La longitud = 3

La dirección 1000 (este valor se toma de la línea que estamos leyendo en el archivo temporal).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería = 4, y si verificamos ¿4 es menor igual que 16? Si, entonces se añade el código máquina.

Quedaría entonces: o S1+longitud+1000+A9E30000+checksum

Leer la siguiente línea de entrada. Línea no. 3. Generar el código máquina (A9EBOOOO). Añadirlo en un registro S1 existente.

La longitud = 3 (permanece igual)

La dirección 1000 (no se requiere utilizar ninguna dirección nueva).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 4, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería = 8, y si verificamos ¿8 es menor igual que 16? Si.

Quedaría entonces: o S1+longitud+1000+A9E30000A9EB0000+chccksum

Leer la siguiente línea de entrada.

Page 39: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

5

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Línea no. 4. Generar el código máquina (A9F30000). Añadirlo en un registro S1 existente.

La longitud = 3 (permanece igual)

La dirección 1000 (no se requiere utilizar ninguna dirección nueva).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 8, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería = 12, y si verificamos ¿12 es menor igual que 16? Si.

Quedaría entonces: o S1+longitud+1000+A9E30000A9EB0000A9F300004checksum

Leer la siguiente línea de entrada.

Línea no. 5. Generar el código máquina (A9FB0000). Añadirlo en un registro S1 existente.

La longitud = 3 (permanece igual)

La dirección 1000 (no se requiere utilizar ninguna dirección nueva).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro SI por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 12, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la

longitud_del_código sería = 16, y si verificamos ¿16 es menor igual que 16? Si.

Quedaría entonces: o S1+longitud+1000+A9E30000A9EB0000A9F30000A9FB0000+checksum

Leer la siguiente línea de entrada. Línea no. 6. Generar el código máquina (3F). Añadirlo en un registro S1 existente.

La longitud = 3 (permanece igual)

La dirección 1000 (no se requiere utilizar ninguna dirección nueva).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 16, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? No, porque la longitud_del_código sería = 17, y si verificamos ¿17 es menor igual que 16? No.

Como se ha alcanzado la longitud máxima del código entonces se deben de calcular los demás valores que conforman el registro S1.

La longitud (del registro) sería entonces longitud = longitud + longitud_del_código = 3 + 16 = 19 (13 en hex.)

Quedaría entonces: o S1+13+1000+A9E30000A9EB0000A9F30000A9FB0000+checksum

Una vez calculada la longitud se debe de calcular el checksum que sería la suma de 13+10+00+A9+E3+00+00+A9+EB+00+00+A9+F3+00+00+A9+FB+00+00, al resultado de la suma se le debe de calcular complemento a 1 y tomar el byte que sería (7C).

Quedaría entonces:

Page 40: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

6

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

o S1+13+1000+A9E30000A9EB0000A9F30000A9FB0000+7C o “S1131000A9E30000A9EB0000A9F30000A9FB00007C" (añadir esta cadena de

caracteres al archivo .OBJ)

Crear un nuevo registro S1. E inicializar las variables.

La longitud = 3

La dirección 1010 (este valor se toma de la línea que estamos leyendo en el archivo temporal).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería = 1, y si verificamos ¿1 es menor igual que 16? Sí.

Quedaría entonces: o S1+longitud+1010+3F+checksum

Leer la siguiente línea de entrada. Línea no. 7. Esta línea NO genera código máquina, Por lo que el registro SI que se estuviera conformando se debe de concluir, INDEPENDIENTEMENTE de si alcanzó o no alcanzó la longitud_del_código de 16.

La longitud = 3 (permanece igual)

La dirección 1010 (permanece igual)

La longitud (del registro) sería entonces longitud = longitud + longitud_del_código = 3+1 = 4(04 en hex.)

Quedaría entonces: o S1+04+1010+3F+checksum

Una vez calculada la longitud se debe de calcular el checksum que sería la suma de 04+10+10+3F, al resultado de la suma se le debe de calcular complemento a 1 y tomar el byte que sería (9C).

Quedaría entonces: o S1+04+1010+3F+9C o "S10410103F9C" (añadir esta cadena de caracteres al archivo .OBJ)

Leer la siguiente línea de entrada. Línea no. 8. Generar el código máquina (A9E30000)

Crear un nuevo registro S1. E inicializar las variables.

La longitud = 3

La dirección 1031 (este valor se toma de la línea que estamos leyendo en el archivo temporal).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro SI por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería = 4, y si verificamos ¿4 es menor igual que 16? Sí.

Page 41: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

7

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Quedaría entonces: o S1+longitud+1031+A9E30000+checksum

Leer la siguiente línea de entrada. Línea no. 9. Generar el código máquina (A9EBOOOO). Añadirlo en un registro S1 existente.

La longitud = 3 (permanece igual)

La dirección 1031 (no se requiere utilizar ninguna dirección nueva)

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 4, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería = 8, y si verificamos ¿8 es menor igual que 16? Si.

Quedaría entonces: o S1+longitud+1031+A9E30000A9EB0000+chccksum

Leer la siguiente línea de entrada. Línea no. 10. Generar el código máquina (A9FB0000). Añadirlo en un registro S1 existente.

La longitud = 3 (permanece igual)

La dirección 1031 (no se requiere utilizar ninguna dirección nueva)

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro SI por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 8, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería = 12, y si verificamos ¿12 es menor igual que 16? Si.

Quedaría entonces: o S1+10ngitud+1031+A9E30000A9EB0000A9FB0000+checksum

Leer la siguiente línea de entrada. Línea no. 11. Generar el código máquina (6162636465). Añadirlo en un registro S1 existente.

La longitud = 3 (permanece igual)

La dirección 1031 (no se requiere utilizar ninguna dirección nueva)

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código = 12, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Parcialmente, porque la longitud_del_código sería = 17, y si verificamos ¿17 es menor igual que 16? No, sin embargo, quedan disponibles 4 pares y se requieren 5 pares, por lo tanto se debe de representar en el registro S1 4 de los 5 pares que requerimos y dejar pendiente el par restante.

Quedaría entonces: o S1+longitud+1031+A9E30000A9EB0000A9FB000061626364+checksum o Quedaría pendiente crear un nuevo registro S1 y colocar en ese registro el valor

65.

La longitud (del registro) sería entonces longitud-longitud + (13 en hex.)

Page 42: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

8

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Quedaría entonces: o S1+13+1031+A9E30000A9EB0000A9FB000061626364+checksum

Una vez calculada la longitud se debe de calcular el checksum que sería la suma de 13+10+31+A9+E3+00+00+A9+EB+00+00+A9+FB+00+00+61+62+63+64, al resultado de la suma se le debe de calcular complemento a 1 y tomar el byte que sería (5D).

Quedaría entonces: o S1+13+1031+A9E30000A9EB0000A9F3000061626364+5D o “S1131031A9E30000A9EB0000A9F30000616263645D" (añadir esta cadena de

caracteres al archivo .OBJ)

Crear un nuevo registro S1. E inicializar las variables.

La longitud= 3

La dirección en este caso se debe de recalcular de la siguiente manera: la dirección que se corresponde con la línea que se está leyendo actualmente es la 103D, a partir de esta dirección se asignaron 4 bytes (61626364) por lo tanto hay que sumar a la dirección 103D la cantidad de bytes colocados (103D + 4 = 1041).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código= 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería = 1, y si verificamos ¿1 es menor igual que 16? Sí.

Quedaría entonces: o S1+longitud+1041+65+checksum

Leer la siguiente línea de entrada. Línea no. 12. Generar el código máquina (3F). Añadirlo en un registro S1 existente.

La longitud= 3 (permanece igual)

La dirección 1041 (no se requiere utilizar ninguna dirección nueva)

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código= 1 ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería= 2, y si verificamos ¿2 es menor igual que 16? Si.

Quedaría entonces: o Sl+longitud+1041+653F+checksum

Leer la siguiente línea de entrada. Línea no. 13. Esta línea NO genera código máquina. Por lo que el registro SI que se estuviera conformando se debe de concluir, INDEPENDIENTEMENTE de si alcanzó o no alcanzó la longitud_del_código de 16.

La longitud= 3 (permanece igual)

La dirección 1041 (permanece igual)

La longitud (del registro) sería entonces longitud = longitud + longitud_del_código = 3 + 2 = 5 (05 en hex.)

Page 43: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

9

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Quedaría entonces: o S1+05+1041+653F+checksum

Una vez calculada la longitud se debe de calcular el checksum que sería la suma de 05+10+41+65+3F, al resultado de la suma se le debe de calcular complemento a 1 y tomar el byte más significativo que sería (05).

Quedaría entonces: o S1+05+1041+653F+05 o "S1051041653F05" (añadir esta cadena de caracteres al archivo .OBJ)

Leer la siguiente línea de entrada. Línea no. 14. Generar el código máquina (3F)

Crear un nuevo registro S1. E inicializar las variables.

La longitud= 3

La dirección 1044 (este valor se toma de la línea que estamos leyendo en el archivo temporal).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código= 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería= 1, y si verificamos ¿1 es menor igual que 16? Sí.

Quedaría entonces: o S1+longitud+1044+3F+checksum

Leer la siguiente línea de entrada.

Línea no. 15. Esta línea NO genera código máquina. Por lo que el registro SI que se estuviera conformando se debe de concluir, INDEPENDIENTEMENTE de si alcanzó o no alcanzó la longitud_del_código de 16.

La longitud= 3 (permanece igual)

La dirección 1044 (permanece igual)

La longitud (del registro) sería entonces longitud= longitud + longitud_del_código= 3 + 1= 4 (04 en hex.)

Quedaría entonces: o S1+04+1044+3F+checksum

Una vez calculada la longitud se debe de calcular el checksum que sería la suma de 04+10+44+3F, al resultado de la suma se le debe de calcular complemento a 1 y tomar el byte que sería (68).

Quedaría entonces: o S1+04+1044+3F+68 o “S10410443F68" (añadir esta cadena de caracteres al archivo .OBJ)

Leer la siguiente línea de entrada. Línea no. 16. Generar el código máquina (3F)

Crear un nuevo registro S1. E inicializar las variables.

Page 44: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

10

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

La longitud= 3

La dirección 1046 (este valor se toma de la línea que estamos leyendo en el archivo temporal).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código= 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería= 1, y si verificamos ¿1 es menor igual que 16? Sí.

Quedaría entonces: o S1+longitud+1046+3F+checksum

Leer la siguiente línea de entrada. Línea no. 17. Generar el código máquina (3F)

Crear un nuevo registro S1. E inicializar las variables.

La longitud= 3

La dirección 1046 (no se requiere utilizar ninguna dirección nueva).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código= 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería= 2, y si verificamos ¿2 es menor igual que 16? Sí.

Quedaría entonces: o S1+longitud+1046+3F3F+checksum

Leer la siguiente línea de entrada. Línea no. 18. Generar el código máquina (3F)

Crear un nuevo registro S1. E inicializar las variables.

La longitud= 3

La dirección 1046 (no se requiere utilizar ninguna dirección nueva).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código= 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería= 3, y si verificamos ¿3 es menor igual que 16? Sí.

Quedaría entonces: o S1+longitud+1046+3F3F3F+checksum

Leer la siguiente línea de entrada. Línea no. 19. Generar el código máquina (3F)

Crear un nuevo registro S1. E inicializar las variables.

La longitud= 3

La dirección 1046 (no se requiere utilizar ninguna dirección nueva).

Page 45: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

11

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código= 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería= 4, y si verificamos ¿4 es menor igual que 16? Sí.

Quedaría entonces: o S1+longitud+1046+3F3F3F3F+checksum

Leer la siguiente línea de entrada. Línea no. 20. Generar el código máquina (3F)

Crear un nuevo registro S1. E inicializar las variables.

La longitud= 3

La dirección 1046 (no se requiere utilizar ninguna dirección nueva).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código= 0, ¿si representamos el código máquina que se acaba de crear se puede representar en el registro S1? Sí, porque la longitud_del_código sería= 5, y si verificamos ¿5 es menor igual que 16? Sí.

Quedaría entonces: o S1+longitud+1046+3F3F3F3F3F+checksum

Leer la siguiente línea de entrada. Línea no. 21. Esta línea NO genera código máquina. Por lo que el registro S1 que se estuviera conformando se debe de concluir, INDEPENDIENTEMENTE de si alcanzó o no alcanzó la longitud_del_código de 16.

La longitud= 3 (permanece igual)

La dirección 1046 (permanece igual)

La longitud (del registro) sería entonces longitud= longitud + longitud_del_código= 3 + 5 = 8 (04 en hex.)

Quedaría entonces: o S1+08+1046+3F3F3F3F3F+checksum

Una vez calculada la longitud se debe de calcular el checksum que sería la suma de 08+1046+3F3F3F3F3F, al resultado de la suma se le debe de calcular complemento a 1 y tomar el byte que sería (66).

Quedaría entonces: o S1+08+1046+3F3F3F3F3F+66 o “S10810463F3F3F3F3F66" (añadir esta cadena de caracteres al archivo .OBJ)

Leer la siguiente línea de entrada. Línea no. 22. Generar el código máquina (6162636465)

Crear un nuevo registro S1. E inicializar las variables.

La longitud= 3

Page 46: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

12

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

La dirección 104C (este valor se toma de la línea que estamos leyendo en el archivo temporal).

Recuerda que como máximo se pueden representar 16 pares de caracteres como código en el registro S1 por lo que se tiene que realizar una verificación previa.

La longitud_del_código= 0, ¿si representamos el código máquina que se acaba de crear se puede representar en cl registro S1? Sí, porque la longitud_del_código sería= 5, y si verificamos ¿5 es menor igual que 16? Sí.

Quedaría entonces: o S1+longitud+104C+6162636465+checksum

Leer la siguiente línea de entrada. Línea no. 23. El CODOP END, por lo que el registro SI que se estuviera conformando se debe de concluir, INDEPENDIENTEMENTE de si alcanzó o no alcanzó la longitud_del_código de 16.

La longitud= 3 (permanece igual)

La dirección 104C (permanece igual)

La longitud (del registro) sería entonces longitud= longitud + longitud_del_código= 3 + 5= 8 (08 en hex.)

Quedaría entonces: o S1+08+104C+6162636465+checksum

Una vez calculada la longitud se debe de calcular el checksum que sería la suma de 08+104C+6162636465, al resultado de la suma se le debe de calcular complemento a 1 y tomar el que sería (AC).

Quedaría entonces: o S1+08+104C+6162636465+AC o “S108104C6162636465AC" (añadir esta cadena de caracteres al archivo .OBJ)

Una vez añadido el último registro S1 entonces, es necesario crear el registro S9 el cual siempre tendrá el valor de S9030000FC.

Nota: Los ejemplos que se utilizaron para representar los nombres de los archivos en el ejemplo para los S0 fueron aleatorios.

Otro ejemplo para la práctica no. 10.

Page 47: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

13

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

No. ETIQUETA CODOP OPERANDO No. VALOR ETIQUETA CODOP OPERANDO

1 Pri equ 1 1 0001 Pri equ 1

2 Seg equ 2 2 0002 Seg equ 2

3 ; comentario uno 3 0003 Ter equ 3

4 Ter equ 3 4 0004 Cua equ 4

5 ; comentario dos 5 00FF null Org 255

6 Cua equ 4 6 00FF Et Ds.b 5

7 Org 255 7 0000 Otra Equ 0

8 Et Ds.b 5 8 0104 null Swi null

9 Otra Equ 0 9 0105 null Ds.w 5

10 Swi 10 0005 Qui equ 5

11 Ds.w 5 11 010F Null Swi null

12 Qui equ 5 12 0006 Sex equ 6

13 Swi 13 0110 Sep Swi Null

14 Sex equ 6 14 0008 Oct equ 8

15 Sep Swi 15 0111 null Ldaa 3

16 Oct equ 8 16 0113 null Ldaa Sep

17 Ldaa 3 17 0116 null Ds.b 3

18 Ldaa Sep 18 0119 null Ldaa 3

19 Ds.b 3 19 0009 Nov equ 9

20 Ldaa 3 20 011B null Swi Null

21 Nov equ 9 21 011C null Dc.b 2

22 Swi 22 000A Dec equ 10

23 Dc.b 2 23 000B Onc equ 11

24 ; comentario tres 24 000D Tre equ 13

25 Dec equ 10 25 011D null Ds.b 1

26 Onc equ 11 26 011E null End null

27 Tre equ 13

28 Ds.b 1

29 End

Page 48: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

14

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

S0… S10401043FB7 S10A01F3F3F9603B6011007 S107011996033F0204 S9030000FC

Page 49: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #11 CARGADOR

Instrucciones. Tomando como base el pseudocódigo del cargador absoluto de la arquitectura SIC,

realiza el pseudocódigo para el algoritmo del cargador absoluto para la arquitectura HC12,

considerando que el registro S0 es el registro de encabezamiento, el registro S1 es el registro de

texto y el registro S9 es el fin.

Pseudocódigo del cargador – absoluto para la arquitectura SIC:

Comienza Leer el registro de encabezamiento Verifica el nombre del programa y la longitud Lee el primer registro de texto

Mientras el tipo del registro < > ‘E’ hacer {si el código objeto está en forma de caracteres, se convierte en una representación interna} Pasa el código objeto a la localidad de memoria especificada Lee el siguiente registro del programa objeto Termina

Salta a la dirección especificada en el registro de fin Termina

Page 50: PRÁCTICA #1 - MITAREA · 2020. 10. 7. · Seminario de traductores de lenguaje I PRÁCTICA #2 Identificar modos de direccionamiento en la tabla de códigos de operación. Modificar

1

Universidad de Guadalajara

Centro universitario de los Altos

Ingeniería en Computación

Seminario de traductores de lenguaje I

PRÁCTICA #12. LIGADOR

Instrucciones. Investiga los diferentes tipos de ligadores que se pueden implementar y determina

cual sería el más conveniente para la arquitectura HC12, deberás de justificar tu respuesta, anotar

en qué consiste la teoría del ligador que hubieras seleccionado, anotar las ventajas y desventajas

que ofrece este algoritmo, en una tabla como la que se muestra a continuación.

Nombre del ligador:------------------------------------------------

Justificación: "anotar aquí la justificación”

Teoría: "anotar aquí en qué consiste la teoría”

Ventajas: Desventajas

"anotar aquí las ventajas" "anotar aquí las desventajas"