Soluciones de los ejercicios sobre Símplez+i4

Soluciones de los ejercicios sobre Símplez+i4 1 1. Escriba los mismos contenidos en octal, y el código fuente en lenguaje ensamblador a partir del cua
Author:  Pedro Ruiz Salas

0 downloads 107 Views 148KB Size

Recommend Stories


SOLUCIONES DE LOS EJERCICIOS PROPUESTOS
SOLUCIONES DE LOS EJERCICIOS PROPUESTOS TEMA 1 EJERCICIO 1 El IPC recoge la subida de los precios de los bienes de una cesta de bienes y servicios que

SOLUCIONES A LOS EJERCICIOS DE LA UNIDAD
7 SOLUCIONES A LOS EJERCICIOS DE LA UNIDAD Pág. 1 PÁGINA 146 EJERCICIOS DE LA UNIDAD Fracciones: significado y representación 1 ¿Qué fracción se h

SOLUCIONES A LOS EJERCICIOS DE LA UNIDAD
SOLUCIONES A LOS EJERCICIOS DE LA UNIDAD 81 Pág. 1 Página 185 PRACTICA Desarrollos y áreas 1 Haz corresponder cada figura con su desarrollo y calc

SOLUCIONES A LOS EJERCICIOS DE LA UNIDAD
13 SOLUCIONES A LOS EJERCICIOS DE LA UNIDAD Pág. 1 PÁGINA 255 EJERCICIOS DE LA UNIDAD Construcciones y ejes de simetría 1 a) Halla el ángulo centr

Story Transcript

Soluciones de los ejercicios sobre Símplez+i4 1 1. Escriba los mismos contenidos en octal, y el código fuente en lenguaje ensamblador a partir del cual el ensamblador ha generado los contenidos de [0] a [3] Dirección

Contenido (hex.)

Contenido (oct.)

Código fuente

[0]

203

1003

LD .A, /3

[1]

642

3102

BR [/2]

[2]

004

0004

[3]

E00

7000

DATA 4 ; (o bien: ST .A, /4) HALT

2. •

¿Qué hace el programa al ejecutarse a partir de la dirección [0]? Pone repetidamente el valor H’E00 en la palabra de dirección [0]. En efecto, a partir de la dirección [4] y hasta la [4095] los contenidos se interpretan como ST .A, /0.



¿Cuándo termina? Cuando, tras ejecutar la ST .A,/0 que hay en [4095], el contador de programa se incrementa y resulta 0, con lo que se ejecuta lo que hay en [0], que ahora es la instrucción HALT.



¿Cuántas instrucciones se ejecutan? Todas las direcciones de memoria, salvo la [2] y la [3], y la [0] se ejecuta dos veces. Por tanto: 4.096-2+1=4.095 instrucciones.



¿Qué contenidos quedan en la memoria tras la ejecución? Sólo cambia el contenido de la dirección [0], que pasa de H’203 (LD .A,/3) a H’E00 (HALT).

1

Soluciones de los ejercicios sobre Símplez+i4

2 Se dan a continuación dos soluciones. Ambas suponen que el argumento “longitud” es mayor que cero y que las zonas no se solapan entre sí ni con las palabras ocupadas por el subprograma. Solución 1:

[7] [8] [9] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215]

ORG 7 0000 TEMP RES 1 ; para almacenamiento provisional 0321 PFIN DATA FIN ; puntero para bifurcar al final 0310 PBUC DATA BUC ; puntero para bifurcar al bucle ORG 200 6401 BUC SUB .X,#1 ; direcciones finales: (5)+(X)-1 y 4110 BZ [/PFIN] ; (6)+(X)-1 1305 LD .A, [/5][.X] 0007 ST .A, /TEMP 1306 LD .A, [/6][.X] 0305 ST .A, [/5][.X] 1007 LD .A, /TEMP 0306 ST .A, [/6][.X] 3111 BR [/PBUC] 1105 FIN LD .A, [/5] ; necesario para intercambiar las 0007 ST .A, /TEMP ; primeras (en el ultimo paso por 1106 LD .A, [/6] ; el bucle (X)=1) 0105 ST .A, [/5] 1007 LD .A, /TEMP 0106 ST .A, [/6] 0000 RET RES 1 ; o cualquier otra cosa

Solución 2:

[7] [8] [9] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212]

ORG 7 0000 TEMP RES 1 0327 PFIN DATA FIN 0316 PBUC DATA BUC ORG 200 1005 LD .A, /5 ; en esta solucion se decrementan 6001 SUB .A,#1 ; inicialmente los punteros, y no (X) 0005 ST .A, /5 1006 LD .A, /6 6001 SUB .A,#1 0006 ST .A, /6 1305 BUC LD .A, [/5][.X] 0007 ST .A, /TEMP 1306 LD .A, [/6][.X] 0305 ST .A, [/5][.X] 1007 LD .A, /TEMP 0306 ST .A, [/6][.X] 6401 SUB .X,#1

2

Soluciones de los ejercicios sobre Símplez+i4 [213] [214] [215]

4110 3111 0000 FIN

BZ BR RES

[/PFIN] [/PBUC] 1

3 Se sirve primero al teclado. Para invertir la prioridad basta con: •

Sustituir la instrucción LD .A,[/PETEC] de la dirección 4002 por LD .A,[/PEPAN]



Ponerle a la instrucción LD .X /XPAN la etiqueta RSTEC (y quitarla de donde está)



Intercambiar las secuencias [4005]-[4016] (servicio de la pantalla) y [4018]-[4029] (servicio del teclado)



Volver a ensamblar el programa

4 ORG 4000 ST .A,/AC ST .X,/X LD .A,[/PETEC] SUB .A,#3 BZ [/PRSTEC] LD .X,/XPAN BZ [/PBIFPAN] LD .A,[/PZPAN][.X] ST .A,[/PDPAN] ;;; INTRUCCIONES NUEVAS: SUB .A,#13 BZ [/PBIFPAN1] ;;; SUB .X,#1 ST .X,/XPAN BR [/PFIN] BIFPAN LD .A,#1 ST .A,[/PEPAN] ST .A,/MSPAN LD .A,[/PZPAN] ST .A,[/PDPAN] BR [/PFIN] ;;; INTRUCCIONES NUEVAS: BIFPAN1 LD .A,#1 ST .A,[/PEPAN]

; ; ; ; ; ; ; ; ;

Guarda (AC) Guarda (X) Mira si ha sido el teclado: en tal caso, debe tener los dos bits de su puerto de estado a "1" Si no ha sido el teclado, es la pantalla; si no es el último carácter, accede a la zona de datos, lo escribe

; si era "ret"... ; ; ; ; ; ; ; ;

y decrementa el índice Va al final Si es el último carácter, inhibe las interrupciones de pantalla, avisa al programa, escribe el carácter y va al final ; ;

Si el último escrito era "ret" inhibe las interrupciones de pantalla,

3

Soluciones de los ejercicios sobre Símplez+i4 ST BR

.A,/MSPAN [/PFIN]

;;; RSTEC

LD .X,/XTEC BZ [/PBIFTEC] LD .A,[/PDTEC] ST .A,[/PZTEC][.X] ;;; INTRUCCIONES NUEVAS: SUB .A,#13 BZ [/PBIFTEC1] ;;; SUB .X,#1 ST .X,/XTEC BR [/PFIN] BIFTEC LD .A,#1 ST .A,[/PETEC] ST .A,/MSTEC LD .A,[/PDTEC] ST .A,[/PZTEC] ;;; INTRUCCIONES NUEVAS: BR [/PFIN] BIFTEC1 LD .A,#1 ST .A,[/PETEC] ST .A,/MSTEC ;;; FIN LD .A,/AC LD .X,/X EI BR [/63] END

; ; ; ; ; ;

avisa al programa, y va al final

Caso del teclado: mira si es el último carácter Carga el carácter en el AC, lo lleva a la zona de datos

; si era "ret"... ;

; ; ; ; ;

y decrementa el índice

Si es el último carácter, inhibe las interrupciones de teclado, avisa al programa y lee el carácter

; Si no era "ret" va al final ; Si era "ret", inhibe ; las interrupciones de teclado ; y avisa al programa ; ; ; ;

Éstas son las operaciones finales: restaurar AC y X, permitir interrupciones y volver al programa

En la parte baja de la memoria habría que incluir dos nuevos punteros: PBIFPAN1 PBIFTEC1

DATA DATA

BIFPAN1 BIFTEC1

4

Soluciones de los ejercicios sobre Símplez+i4

5 Al terminar de ejecutar EI la UCP reconocería la interrupción y pondría en la dirección 63 el valor D’4033 (machacando la dirección de retorno al programa). Tras servir a la interrupción quedaría atrapada indefinidamente, ejecutando siempre la misma instrucción: BR [/63].

6 ORG ST ST LD SUB BZ LD ... ... ST BR RSREL LD LD SUB BZ LD ADD ST BR PACSEG LD ST LD SUB BZ LD ADD ST BR PACMIN LD ST LD ADD ST FIN LD LD EI BR END

4000 .A,/AC .X,/X .A,[/PEREL] .A,#3 [/PRSREL] .A,[/PETEC]

.A,[/PZTEC] [/PFIN] .A,[/PDREL] .A,/SEG .A,#59 [/PPACSEG] .A,#1 .A,/SEG .A,/SEG [/PFIN] .A,#0 .A,/SEG .A,/MIN .A,#59 [/PPACMIN] .A,#1 .A,/MIN .A,/MIN [/PFIN] .A,#0 .A,/MIN .A,#1 .A,/HOR .A,/HOR .A,/AC .X,/X [/63]

; ; ; ; ; ; ;

Guarda (AC) Guarda (X) Mira si ha sido el reloj. En el programa de iniciación, PEREL DATA 4090, PDREL DATA y PRSREL DATA RSREL A partir de aquí, servicio del teclado y la pantalla, igual que en el programa anterior

; ; ; ; ; ; ;

Fin de la RS del teclado Salida. A continuación, RS del reloj Pone 0 en "preparado" En el programa de iniciación, SEG DATA 0, MIN HOR DATA 0 y PPACSEG DATA PACSEG Caso de SEG < 59

;

Incrementado SEG, salir:

;

Caso de SEG = 59

; ;

En el programa de iniciación, PPACMIN Caso de MIN < 59

;

Incrementado MIN, salir:

;

Caso de MIN = 59

; ; ; ; ;

Incrementado HOR, salir: Éstas son las operaciones finales: restaurar AC y X, permitir interrupciones y volver al programa

DATA

4091

DATA

PACMIN

5

0

Soluciones de los ejercicios sobre Símplez+i4

7 Solución 1: Inicialmente el programa analiza la situación, dependiendo de los valores que tengan Z (con la instrucción BZ), (AC) y (X), y pone a “0” o a “1” una variable booleana local, AX, según que a la salida se deba restaurar el último AC o X, respectivamente. Z

AC

X

Valor de AX

1

0

0

indiferente

1

0

distinto de 0

AX = 0

1

distinto de 0

0

AX = 1

1

distinto de 0

distinto de 0

imposible

0

0

0

imposible

0

0

distinto de 0

AX = 1

0

distinto de 0

0

AX = 0

0

distinto de 0

distinto de 0

indiferente

Una solución es la que indica el siguiente seudocódigo: /* inmediatamente después de [4001] (recordar que la instrucción ST no afecta a Z) */ si Z == 1 entonces /* implementación: con BZ */ si AC == 0 entonces /* implementación: con SUB .A,#0 y BZ */ AX = 0 si no, AX = 1 si no, si AC == 0 entonces AX = 1 si no, AX = 0 /* operaciones de consulta y servicio */ ... /* al final, en sustitución de [4030] y ss.: */ si AX == 0 entonces LD .X,/X, LD .A,/AC si no LD .A,/AC, LD .X,/X EI BR [/63]

Hay otras tres soluciones equivalentes siguiendo esta misma idea de calcular al principio la variable AX. En efecto, si consideramos “AC” y “X” como variables booleanas (“distinto de 0” sería el valor “1”) y aplicamos, por ejemplo, el método de Karnaugh para minimizar AX = f(Z, AC, X), encontramos cuatro fórmulas:

6

Soluciones de los ejercicios sobre Símplez+i4 •

AX = Z·AC + ~Z·~AC



AX = Z·~X + ~Z·X



AX = Z·AC + ~Z·X



AX = Z·~X + ~Z·~AC

(Donde “~Z”, “~AC” y “~X” significan “no Z”, “no AC” y “no X”) El seudocódigo propuesto corresponde a la primera fórmula. A partir de él, o de cualquiera de los correspondientes a las otras fórmulas, es inmediata la codificación del programa en ensamblador. Pero hay otras soluciones más económicas en número de instrucciones. Solución 2: Podemos prescindir del cálculo de AX al principio y en su lugar guardar el valor de Z en ZM. Al terminar, restaurar AC y X como en el programa original. Si el último restaurado ha sido X, el valor de Z será “0” si X es distinto de cero y “1” si X es igual a cero. La segunda de las fórmulas (AX = Z·~X + ~Z·X) se puede escribir así: AX = ZM·Z + ~ZM·~Z; Si el resultado de ZM·Z + ~ZM·~Z es “1” (cosa que ocurre cuando Z = ZM) es que hemos hecho bien en restaurar X después de AC, y si no es así repetimos la operación de restaurar AC para que sea la última. Es decir: /* inmediatamente después de [4001] */ si Z == 1 entonces ZM = 1, si no ZM = 0 /* operaciones de consulta y servicio */ ... /* al final, en sustitución de [4030] y ss.: */ si ZM == 0 entonces LD .A,/AC, LD .X,/X si Z == 1 entonces LD .A,/AC si no LD .A,/AC, LD .X,/X si Z == 0 entonces LD .A,/AC EI BR [/63]

Notas: •

Podría pensarse en hacer LD .A,/AC y LD .X,/X antes de la consulta sobre ZM, pero no es posible, porque luego se perderían los valores restaurados de AC y X.

7

Soluciones de los ejercicios sobre Símplez+i4 •

Otra posibilidad es restaurar primero X y luego AC y aplicar la fórmula AX = Z·AC + ~Z·~AC

La implementación en ensamblador sería:

PZ PSIGUE PZM0 PLDA PSAL ZM

Z SIGUE ; ; ; ;

LDA SAL ZM0

ORG DATA DATA DATA DATA DATA RES

57 Z SIGUE ZM0 LDA SAL 1

ORG 4000 ST .A,/AC ST .X,/X BZ [/PZ] LD .A,#0 ST .A,/ZM BR [/PSIGUE] LD .A,#1 ; Z=1: hay que terminar restaurando ST .A,/ZM ; el registro que contenga 0 ... consulta y servicio ... ... al final: LD BZ LD LD BZ LD EI BR LD LD BZ BR

.A,/ZM [/PZM0] .A,/AC .X,/X [/PSAL] ; ZM=1, Z=1: OK, salir .A,/AC ; ZM=1, Z=0: restaurar AC [/63] .A,/AC .X,/X [/PLDA] [/PSAL]

; ZM=0, Z=1: restaurar AC ; ZM=0, Z=0: OK, salir

8 a. Como dispone de direccionamiento indirecto, la capacidad de direccionamiento está determinada por la longitud de palabra: 216 = 65.536 palabras de 16 bits, es decir, 65.536×2 = 131.072 bytes (128 KB). Como a cada puerto de periférico se le asigna una dirección de memoria, el número de palabras que quedan para la MP son: 65.536 - 2×4 = 65.528.

8

Soluciones de los ejercicios sobre Símplez+i4 b. Modificaciones sobre el modelo procesal de Símplez: •

En la transición de I1 a I0: añadir INC, SET y BRA.



En la transición de I1 a O0: añadir SUB.



Añadir dos estados, II0 e II1, para el ciclo de indirección.



Transición de I1 a II0 etiquetada con LDI y STI.



Transiciones de II0 a II1 y de II1 a O0.

c. (sí/no) STI

LDI





nombre funcionalidad

componente Registro de 16 bits, RD, entre los buses D y Ai, con puerta triestado de salida. (Ver nota más abajo)

erd

Carga los valores del bus D en un registro de direcciones, RD

srd

Saca el contenido de RD al bus Ai

erd

(lo mismo)

(lo mismo)

srd SUB



sub

Resta entradas de la UAL

UAL

BRA



saa

Activa una puerta triestado que pone los 12 bits menos significativos del AC en el bus Ai

Puerta triestado entre AC y bus Ai

SET



set

Pone a 1 la salida de la UAL

UAL

INCR



inc

Incrementa el contenido del acumulador (o bien incrementa la entrada 2 de la UAL)

Acumulador (o bien UAL)

d. Otras modificaciones necesarias en la ruta de datos de Símplez: •

Bus D, registros RI y AC con 16 bits (= longitud de palabra).



Buses Ai y A, registros CP y RA con 16 bits (= longitud de dirección) (los 4 bits más significativos de Ai deben ponerse a 0 cuando se depositen en este bus los contenidos de AC y CD).



Más líneas en el bus de control y cuatro controladores de periféricos.

Notas: •

En principio, se podría prescindir del registro RD, conectando los buses D y Ai mediante unas puertas triestado que se activasen durante el ciclo de indirección. En este caso, durante este ciclo de indirección (II0, II1) habría que mantener la señal lec para que los datos estuviesen estables en el bus D, y, por tanto, en el Ai, durante todo el ciclo (esto es así porque la entrada de la dirección en el registro RA se produce en el flanco de subida de II1).

9

Soluciones de los ejercicios sobre Símplez+i4 •

Otra solución es reutilizar RI para que haga esta función de registro intermedio. Conectaríamos sus dieciséis bits con el bus Ai a través de puertas triestado, y para la transferencia (RI) → bus Ai usaríamos dos microórdenes distintas: una para transferir los dieciséis bits (para el caso de indirección), y otra para transferir los doce menos significativos, poniendo a cero los otros cuatro. Esta solución valdría para este caso, pero no, por ejemplo, para el caso de Símplez+i3 del ejercicio siguiente.

9

10

Soluciones de los ejercicios sobre Símplez+i4

10

Se puede comprobar que el modelo satisface la condición de que el efecto de la instrucción EI sea retardado (ejercicio 5).

• Padre: Materiales didácticos • Inicial: Fundamentos de ordenadores

11

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.