TP Algoritmez

9

Click here to load reader

Transcript of TP Algoritmez

Page 1: TP Algoritmez

TÉCNICAS DIGITALES II UTN-FRM

1

Curso Turno

Fecha Grupo

Integrantes

Ejercicios sobre Algorítmez

1 Traduzca a binario (expresando el resultado en hexadecimal) las siguientes parejas de instrucciones: a. LD.B .10,[.15++] DATA.B 12 b. LD .10,[.15++] DATA 12 c. LD .10,[[.15++]] DATA 12 ¿Cuál será el resultado de la ejecución de cada una de las parejas? Responda a las mismas cuestiones para cada una de las siguientes instrucciones: a. LD.B .10,#12 b. LD .10,#12 c. LD .10,/12

2 Escriba instrucciones, o secuencias de instrucciones, de Algorítmez cuyos efectos sean idénticos a los de las instrucciones EI, DI, CLRC, CLRV, POP y PUSH: 3 Traduzca a binario (expresando el resultado en hexadecimal) las siguientes parejas de instrucciones: a. LD.B .10,[.15++] DATA.B 12 b. LD .10,[.15++] DATA 12 c. LD .10,[[.15++]] DATA 12 ¿Cuál será el resultado de la ejecución de cada una de las parejas?

Nicolas Gutierrez
4R5
Nicolas Gutierrez
Noche
Nicolas Gutierrez
16-09-13
Nicolas Gutierrez
grupo 1
Nicolas Gutierrez
baggio, camiletti, gutierrez, lescano
Nicolas Gutierrez
Page 2: TP Algoritmez

TÉCNICAS DIGITALES II UTN-FRM

2

Responda a las mismas cuestiones para cada una de las siguientes instrucciones: a. LD.B .10,#12 b. LD .10,#12 c. LD .10,/12 4 Escriba en binario y en hexadecimal, tal como quedan almacenadas en la MP de Algorítmez, las siguientes instrucciones: LD.B .0,[.7++] LD.B .0,#2 LD.B .0,/-10[.7] LD.B .0,-10 LD.B .0,[[.7++]] LD.B .0,/1000 Considere independientemente a cada una de las instrucciones, y suponga, para cada una de ellas, que se carga a partir de la dirección d.

5 Complete los comentarios de las líneas de puntos diciendo, escueta pero precisamente, lo que hace cada instrucción (el resultado de su ejecución) en este programa:

ORG 1000 BR PRINC ; esta instruccion ocupa tres bytes

DOS EQU 2 DATO DATA 2

PRINC LD .5, #DATO ; carga en R5... LD .4, /DATO ; carga en R4... LD .3, DATO ; carga en R3... LD .2, #DOS ; carga en R2... LD .1, /DOS ; carga en R1... LD .0, DOS ; carga en R0...

6 Con respecto al ejemplo de BR #-125 citado en la Tabla 6.8 del libro, a. Escriba (en hexadecimal) la traducción binaria que generaría el ensamblador. b. ¿Cuál sería la instrucción que se ejecutaría inmediatamente después?

7 a. Algorítmez no dispone de ninguna instrucción para realizar directamente la operación XOR (OR

Page 3: TP Algoritmez

TÉCNICAS DIGITALES II UTN-FRM

3

exclusivo). Escriba un subprograma que permita realizar esta operación entre dos operandos de tipo palabra, recibiendo el primer operando en la dirección apuntada por R1, el segundo en la dirección apuntada por R2, y dejando el resultado en R0, y teniendo en cuenta que:

A XOR B = ((NOT A) AND B) OR (A AND (NOT B)) b. Un algoritmo de cifrado muy sencillo para cifrar palabras es:

Palabra XOR Clave = Palabra cifrada

ya que descifrar la palabra es igual de simple:

Palabra cifrada XOR Clave = Palabra

Escriba un subprograma que cifre las palabras de una zona de memoria y las guarde, ya cifradas, en otra, y que deje los registros de la ML tal como estaban antes de su ejecución. El subprograma necesita cuatro argumentos: la dirección de comienzo de la zona de datos originales, la de la zona de datos codificados, el número de palabras a cifrar (longitud de las zonas) y la dirección de la clave. Esos argumentos, de dos bytes cada uno, se le pasarán por la pila, en el orden enunciado.

8 El equivalente de un “subprograma” en el lenguaje C es una “función”. La definición de una función empieza con su tipo (que puede ser “void”, si no devuelve nada), su nombre y una lista de parámetros formales entre paréntesis, cada uno con su tipo, y le sigue el cuerpo de la función entre corchetes. Es decir, la misma sintaxis que los “métodos” de Java (los diseñadores del lenguaje Java escogieron construcciones sintácticas familiares a los programadores de C y C++). Conociendo Java es fácil entender un programa escrito en C. Por ejemplo, debe ser inmediato darse cuenta de lo que hace el siguiente fragmento de programa (obviando el que los argumentos de main() sean diferentes a los de Java, lo que aquí no tiene ninguna importancia):

int main(int argc, char *argv[]) { int x, m; x = 12; m = media(9,x); ... } int media(int a, int b) { return ((a + b)/2); }

Suponga que tenemos un compilador de C para Algorítmez en el que las variables de tipo entero (int) se traducen por una palabra (16 bits). Como en la mayoría de los compiladores, el paso de parámetros en las llamadas a funciones, así como la preservación de la dirección de retorno se realiza a través de la pila. El convenio de paso de parámetros que utiliza este compilador es el que se explica en el libro (pág. 632). Es decir, al entrar en el subprograma que implementa a la función, en la cima de la pila está la dirección de retorno (en la dirección D). A continuación los parámetros de derecha a izquierda: el de más a la derecha

Page 4: TP Algoritmez

TÉCNICAS DIGITALES II UTN-FRM

4

(junto a “)”) estará en la dirección D+2, el siguiente en la D+4 (suponiendo que todos ocupan una palabra), y así sucesivamente. Finalmente, el compilador sigue el convenio de devolver la salida de las funciones por el registro R0 (si son de tipo int, como en el ejemplo). Para las sentencias que figuran en main(), el compilador genera el código binario cuyo equivalente en ensamblador es:

/* Código C */ ; Código ensamblador /*-------------------*/ ;------------------- int x, m X RES 1 M RES 1 x = 12; LD .0, #12 ST .0, X

m = media(9, x); LD .0, #9 PUSH .0 LD .0, X PUSH .0 CCC CALL /MEDIA SSS ADD .14, #4 ST .0, M

a. ¿Para qué sirve la instrucción “ADD .14,#4”? ¿Qué ocurre si se omite? b. Escriba el código que generaría el compilador para la función media (subprograma MEDIA). c. Suponiendo que a la etiqueta X le corresponde la dirección D’32.001 y que el registro R14, es decir el puntero de pila, tiene el valor D’59.004 antes de ejecutar la instrucción CCC CALL /MEDIA, escriba los valores que contienen R14, las variables X y M y las palabras comprendidas entre las direcciones D’59.002 y D’59.006 inmediatamente después de ejecutarse la instrucción CCC CALL /MEDIA y después de ejecutarse SSS ADD .14, #4.

9 Éste es un programa de prueba trivial (y muy incompleto) para comprobar el buen funcionamiento de los módulos BINHEX (Programa 6.10) y REGHEX (Programas 6.11 o 6.12):

MODULE PRUEBA FROM REGHEX IMPORT RH_ENT DP RES.B 4 ; para guardar el resultado ENT LD .0, #H’1234 LD .2, #DP CALL /RH_ENT HALT END ENT

a. Después de ensamblar los módulos REGHEX (en la versión del Programa 6.12), BINHEX y PRUEBA, ¿qué contenidos tendrán las tablas de símbolos, las tablas de símbolos externos, las tablas de símbolos de acceso y los diccionarios de reubicación de cada uno de los módulos? b. Si el montador pone primero el módulo PRUEBA inmediatamente seguido de REGHEX y BINHEX, ¿qué direcciones contendrá el diccionario de reubicación del módulo resultante?

Page 5: TP Algoritmez

TÉCNICAS DIGITALES II UTN-FRM

5

c. Si se carga el programa a partir de la dirección D’1.000, ¿en qué direcciones de memoria queda cargada la instrucción CALL /RH_ENT de PRUEBA y cómo queda codificada?

Page 6: TP Algoritmez

4R5$/$Grupo$1$ Técnicas$Digitales$ Trabajo$Practico$Algorítmez$$

$6$

RESOLUCIONES$$EJERCICIO$1$

$ $EJERCICIO$2$

EJERCICIO$3$$$Este$ejercicio$se$encuentra$repetido$y$es$similar$al$ejercicio$1$$$$$

Page 7: TP Algoritmez

4R5$/$Grupo$1$ Técnicas$Digitales$ Trabajo$Practico$Algorítmez$$

$7$

EJERCICIO$4$

$EJERCICIO$5$

$EJERCICIO$6$

$$$

Page 8: TP Algoritmez

4R5$/$Grupo$1$ Técnicas$Digitales$ Trabajo$Practico$Algorítmez$$

$8$

EJERCICIO$7$

$EJERCICIO$8$

$$$$$$$$$$$$$$$$$$

Page 9: TP Algoritmez

4R5$/$Grupo$1$ Técnicas$Digitales$ Trabajo$Practico$Algorítmez$$

$9$

EJERCICIO$9$